Global Metrics
path: .metrics.nargs.average
old: 1.3333333333333333
new: 0.8571428571428571
path: .metrics.nargs.sum
old: 4.0
new: 12.0
path: .metrics.cyclomatic.average
old: 1.4
new: 11.25
path: .metrics.cyclomatic.sum
old: 14.0
new: 90.0
path: .metrics.cognitive.sum
old: 0.0
new: 115.0
path: .metrics.cognitive.average
old: 0.0
new: 8.214285714285714
path: .metrics.halstead.purity_ratio
old: 0.5161396424509419
new: 1.1089252472197273
path: .metrics.halstead.estimated_program_length
old: 91.35671671381672
new: 2979.6821392794072
path: .metrics.halstead.n1
old: 11.0
new: 35.0
path: .metrics.halstead.N1
old: 117.0
new: 1534.0
path: .metrics.halstead.bugs
old: 0.24045696822978063
new: 4.1401698054927545
path: .metrics.halstead.length
old: 177.0
new: 2687.0
path: .metrics.halstead.n2
old: 14.0
new: 334.0
path: .metrics.halstead.difficulty
old: 23.571428571428573
new: 60.41167664670659
path: .metrics.halstead.vocabulary
old: 25.0
new: 369.0
path: .metrics.halstead.time
old: 1076.37952398707
new: 76901.81811504468
path: .metrics.halstead.volume
old: 821.9625455901262
new: 22913.330715284283
path: .metrics.halstead.N2
old: 60.0
new: 1153.0
path: .metrics.halstead.level
old: 0.04242424242424242
new: 0.016553091314583074
path: .metrics.halstead.effort
old: 19374.831431767263
new: 1384232.7260708043
path: .metrics.nexits.average
old: 0.0
new: 1.4285714285714286
path: .metrics.nexits.sum
old: 0.0
new: 20.0
path: .metrics.mi.mi_original
old: 69.50441420104279
new: 86.86575010804876
path: .metrics.mi.mi_visual_studio
old: 40.64585625791976
new: 50.79868427371272
path: .metrics.mi.mi_sei
old: 51.561560473613966
new: 104.349844606786
path: .metrics.nom.total
old: 3.0
new: 14.0
path: .metrics.nom.closures
old: 0.0
new: 6.0
path: .metrics.nom.functions
old: 3.0
new: 8.0
path: .metrics.loc.lloc
old: 0.0
new: 164.0
path: .metrics.loc.ploc
old: 44.0
new: 447.0
path: .metrics.loc.sloc
old: 50.0
new: 2.0
path: .metrics.loc.cloc
old: 6.0
new: 46.0
Spaces Data
Minimal test - lines (555, 574)
path: .spaces[3].metrics.nom.functions
old: 3.0
new: 1.0
path: .spaces[3].metrics.nom.total
old: 3.0
new: 1.0
path: .spaces[3].metrics.nexits.average
old: 0.0
new: 2.0
path: .spaces[3].metrics.nexits.sum
old: 0.0
new: 2.0
path: .spaces[3].metrics.cognitive.sum
old: 0.0
new: 2.0
path: .spaces[3].metrics.cognitive.average
old: 0.0
new: 2.0
path: .spaces[3].metrics.halstead.N1
old: 18.0
new: 32.0
path: .spaces[3].metrics.halstead.difficulty
old: 7.0
new: 8.25
path: .spaces[3].metrics.halstead.n2
old: 3.0
new: 14.0
path: .spaces[3].metrics.halstead.purity_ratio
old: 1.0169321648569456
new: 1.7237116361097495
path: .spaces[3].metrics.halstead.length
old: 24.0
new: 53.0
path: .spaces[3].metrics.halstead.N2
old: 6.0
new: 21.0
path: .spaces[3].metrics.halstead.n1
old: 7.0
new: 11.0
path: .spaces[3].metrics.halstead.vocabulary
old: 10.0
new: 25.0
path: .spaces[3].metrics.halstead.time
old: 31.004662218948713
new: 112.80700660994437
path: .spaces[3].metrics.halstead.effort
old: 558.0839199410768
new: 2030.5261189789985
path: .spaces[3].metrics.halstead.bugs
old: 0.02259496908909482
new: 0.05345042122894763
path: .spaces[3].metrics.halstead.level
old: 0.14285714285714285
new: 0.12121212121212122
path: .spaces[3].metrics.halstead.estimated_program_length
old: 24.406371956566694
new: 91.35671671381672
path: .spaces[3].metrics.halstead.volume
old: 79.7262742772967
new: 246.1243780580604
path: .spaces[3].metrics.loc.sloc
old: 5.0
new: 20.0
path: .spaces[3].metrics.loc.cloc
old: 0.0
new: 1.0
path: .spaces[3].metrics.loc.lloc
old: 0.0
new: 9.0
path: .spaces[3].metrics.loc.blank
old: 0.0
new: 5.0
path: .spaces[3].metrics.loc.ploc
old: 5.0
new: 14.0
path: .spaces[3].metrics.mi.mi_original
old: 121.23838999844426
new: 93.14878471631695
path: .spaces[3].metrics.mi.mi_sei
old: 99.61645146172272
new: 75.96606780783563
path: .spaces[3].metrics.mi.mi_visual_studio
old: 70.89964327394401
new: 54.472973518314014
path: .spaces[3].metrics.nargs.sum
old: 4.0
new: 1.0
path: .spaces[3].metrics.nargs.average
old: 1.3333333333333333
new: 1.0
path: .spaces[3].metrics.cyclomatic.sum
old: 4.0
new: 3.0
path: .spaces[3].metrics.cyclomatic.average
old: 1.0
new: 3.0
Code
nsDragService::GetNumDropItems(uint32_t* aNumItems) {
NS_OBJC_BEGIN_TRY_BLOCK_RETURN;
*aNumItems = 0;
// first check to see if we have a number of items cached
if (mDataItems) {
mDataItems->GetLength(aNumItems);
return NS_OK;
}
NSArray* droppedItems = [globalDragPboard pasteboardItems];
if (droppedItems) {
*aNumItems = [droppedItems count];
}
return NS_OK;
NS_OBJC_END_TRY_BLOCK_RETURN(NS_ERROR_FAILURE);
}
Minimal test - lines (577, 581)
path: .spaces[4].metrics.mi.mi_sei
old: 96.04529408721528
new: 97.33099448879852
path: .spaces[4].metrics.mi.mi_original
old: 118.97478077838218
new: 119.86596038678442
path: .spaces[4].metrics.mi.mi_visual_studio
old: 69.57589519203637
new: 70.09705285776867
path: .spaces[4].metrics.halstead.vocabulary
old: 10.0
new: 17.0
path: .spaces[4].metrics.halstead.estimated_program_length
old: 23.509775004326936
new: 52.529325012980806
path: .spaces[4].metrics.halstead.level
old: 0.16666666666666666
new: 0.14814814814814814
path: .spaces[4].metrics.halstead.time
old: 26.5754247590989
new: 44.451158398597435
path: .spaces[4].metrics.halstead.N1
old: 16.0
new: 17.0
path: .spaces[4].metrics.halstead.n2
old: 4.0
new: 8.0
path: .spaces[4].metrics.halstead.effort
old: 478.3576456637802
new: 800.1208511747539
path: .spaces[4].metrics.halstead.purity_ratio
old: 0.9795739585136224
new: 1.8113560349303728
path: .spaces[4].metrics.halstead.difficulty
old: 6.0
new: 6.75
path: .spaces[4].metrics.halstead.n1
old: 6.0
new: 9.0
path: .spaces[4].metrics.halstead.length
old: 24.0
new: 29.0
path: .spaces[4].metrics.halstead.N2
old: 8.0
new: 12.0
path: .spaces[4].metrics.halstead.volume
old: 79.7262742772967
new: 118.53642239625984
path: .spaces[4].metrics.halstead.bugs
old: 0.020388278552093332
new: 0.02872868874940668
path: .spaces[4].metrics.loc.ploc
old: 6.0
new: 5.0
path: .spaces[4].metrics.loc.lloc
old: 0.0
new: 3.0
path: .spaces[4].metrics.loc.sloc
old: 6.0
new: 5.0
path: .spaces[4].metrics.nexits.average
old: null
new: 1.0
path: .spaces[4].metrics.nexits.sum
old: 0.0
new: 1.0
path: .spaces[4].metrics.nom.total
old: 0.0
new: 1.0
path: .spaces[4].metrics.nom.functions
old: 0.0
new: 1.0
path: .spaces[4].metrics.nargs.sum
old: 0.0
new: 3.0
path: .spaces[4].metrics.nargs.average
old: null
new: 3.0
path: .spaces[4].metrics.cognitive.average
old: null
new: 0.0
Code
nsDragService::UpdateDragImage(nsINode* aImage, int32_t aImageX, int32_t aImageY) {
nsBaseDragService::UpdateDragImage(aImage, aImageX, aImageY);
mDragImageChanged = true;
return NS_OK;
}
Minimal test - lines (57, 57)
path: .spaces[0].metrics.nom.total
old: 0.0
new: 1.0
path: .spaces[0].metrics.nom.functions
old: 0.0
new: 1.0
path: .spaces[0].metrics.mi.mi_visual_studio
old: 55.99744445069413
new: 92.40962204246613
path: .spaces[0].metrics.mi.mi_original
old: 95.75563001068696
new: 158.02045369261705
path: .spaces[0].metrics.mi.mi_sei
old: 97.92581338179852
new: 152.37629276875444
path: .spaces[0].metrics.nexits.average
old: null
new: 0.0
path: .spaces[0].metrics.cognitive.average
old: null
new: 0.0
path: .spaces[0].metrics.loc.ploc
old: 16.0
new: 1.0
path: .spaces[0].metrics.loc.sloc
old: 16.0
new: 1.0
path: .spaces[0].metrics.loc.cloc
old: 4.0
new: 0.0
path: .spaces[0].metrics.halstead.N1
old: 44.0
new: 4.0
path: .spaces[0].metrics.halstead.vocabulary
old: 15.0
new: 5.0
path: .spaces[0].metrics.halstead.difficulty
old: 26.0
new: 2.0
path: .spaces[0].metrics.halstead.n1
old: 10.0
new: 4.0
path: .spaces[0].metrics.halstead.effort
old: 7110.540884007504
new: 23.21928094887362
path: .spaces[0].metrics.halstead.level
old: 0.038461538461538464
new: 0.5
path: .spaces[0].metrics.halstead.N2
old: 26.0
new: 1.0
path: .spaces[0].metrics.halstead.bugs
old: 0.12325763690663293
new: 0.002712967490108627
path: .spaces[0].metrics.halstead.purity_ratio
old: 0.6404131631901491
new: 1.6
path: .spaces[0].metrics.halstead.volume
old: 273.4823416925963
new: 11.60964047443681
path: .spaces[0].metrics.halstead.estimated_program_length
old: 44.82892142331043
new: 8.0
path: .spaces[0].metrics.halstead.time
old: 395.030049111528
new: 1.289960052715201
path: .spaces[0].metrics.halstead.n2
old: 5.0
new: 1.0
path: .spaces[0].metrics.halstead.length
old: 70.0
new: 5.0
path: .spaces[0].metrics.cyclomatic.average
old: 5.0
new: 1.0
path: .spaces[0].metrics.cyclomatic.sum
old: 5.0
new: 1.0
path: .spaces[0].metrics.nargs.average
old: null
new: 0.0
Code
nsDragService::~nsDragService() {}
Minimal test - lines (494, 552)
path: .spaces[2].metrics.halstead.difficulty
old: 5.25
new: 26.23728813559322
path: .spaces[2].metrics.halstead.volume
old: 59.79470570797252
new: 2014.512460305628
path: .spaces[2].metrics.halstead.N2
old: 7.0
new: 129.0
path: .spaces[2].metrics.halstead.purity_ratio
old: 1.3060986113514963
new: 1.4465665820558746
path: .spaces[2].metrics.halstead.n2
old: 4.0
new: 59.0
path: .spaces[2].metrics.halstead.bugs
old: 0.015396668859824946
new: 0.46946657879634873
path: .spaces[2].metrics.halstead.n1
old: 6.0
new: 24.0
path: .spaces[2].metrics.halstead.length
old: 18.0
new: 316.0
path: .spaces[2].metrics.halstead.effort
old: 313.9222049668557
new: 52855.34387378157
path: .spaces[2].metrics.halstead.time
old: 17.44012249815865
new: 2936.407992987865
path: .spaces[2].metrics.halstead.N1
old: 11.0
new: 187.0
path: .spaces[2].metrics.halstead.vocabulary
old: 10.0
new: 83.0
path: .spaces[2].metrics.halstead.estimated_program_length
old: 23.509775004326936
new: 457.1150399296564
path: .spaces[2].metrics.halstead.level
old: 0.1904761904761905
new: 0.03811369509043928
path: .spaces[2].metrics.nom.functions
old: 0.0
new: 1.0
path: .spaces[2].metrics.nom.total
old: 0.0
new: 2.0
path: .spaces[2].metrics.nom.closures
old: 0.0
new: 1.0
path: .spaces[2].metrics.cyclomatic.sum
old: 1.0
new: 18.0
path: .spaces[2].metrics.cyclomatic.average
old: 1.0
new: 18.0
path: .spaces[2].metrics.nexits.average
old: null
new: 1.5
path: .spaces[2].metrics.nexits.sum
old: 0.0
new: 3.0
path: .spaces[2].metrics.loc.blank
old: 0.0
new: 10.0
path: .spaces[2].metrics.loc.lloc
old: 0.0
new: 26.0
path: .spaces[2].metrics.loc.cloc
old: 0.0
new: 1.0
path: .spaces[2].metrics.loc.ploc
old: 5.0
new: 48.0
path: .spaces[2].metrics.loc.sloc
old: 5.0
new: 59.0
path: .spaces[2].metrics.cognitive.average
old: null
new: 12.5
path: .spaces[2].metrics.cognitive.sum
old: 0.0
new: 25.0
path: .spaces[2].metrics.nargs.sum
old: 0.0
new: 2.0
path: .spaces[2].metrics.nargs.average
old: null
new: 1.0
path: .spaces[2].metrics.mi.mi_original
old: 123.42433677519352
new: 61.241604461135054
path: .spaces[2].metrics.mi.mi_visual_studio
old: 72.17797472233539
new: 35.81380377844155
path: .spaces[2].metrics.mi.mi_sei
old: 102.46464645797268
new: 24.50102438808713
Code
nsDragService::IsDataFlavorSupported(const char* aDataFlavor, bool* _retval) {
NS_OBJC_BEGIN_TRY_BLOCK_RETURN;
*_retval = false;
if (!globalDragPboard) return NS_ERROR_FAILURE;
nsDependentCString dataFlavor(aDataFlavor);
// first see if we have data for this in our cached transferable
if (mDataItems) {
uint32_t dataItemsCount;
mDataItems->GetLength(&dataItemsCount);
for (unsigned int i = 0; i < dataItemsCount; i++) {
nsCOMPtr currentTransferable = do_QueryElementAt(mDataItems, i);
if (!currentTransferable) continue;
nsTArray flavors;
nsresult rv = currentTransferable->FlavorsTransferableCanImport(flavors);
if (NS_FAILED(rv)) continue;
for (uint32_t j = 0; j < flavors.Length(); j++) {
if (dataFlavor.Equals(flavors[j])) {
*_retval = true;
return NS_OK;
}
}
}
}
const NSString* type = nil;
bool allowFileURL = false;
if (dataFlavor.EqualsLiteral(kFileMime)) {
type = [UTIHelper stringFromPboardType:(NSString*)kUTTypeFileURL];
allowFileURL = true;
} else if (dataFlavor.EqualsLiteral(kUnicodeMime)) {
type = [UTIHelper stringFromPboardType:NSPasteboardTypeString];
} else if (dataFlavor.EqualsLiteral(kHTMLMime)) {
type = [UTIHelper stringFromPboardType:NSPasteboardTypeHTML];
} else if (dataFlavor.EqualsLiteral(kURLMime) || dataFlavor.EqualsLiteral(kURLDataMime)) {
type = [UTIHelper stringFromPboardType:kPublicUrlPboardType];
} else if (dataFlavor.EqualsLiteral(kURLDescriptionMime)) {
type = [UTIHelper stringFromPboardType:kPublicUrlNamePboardType];
} else if (dataFlavor.EqualsLiteral(kRTFMime)) {
type = [UTIHelper stringFromPboardType:NSPasteboardTypeRTF];
} else if (dataFlavor.EqualsLiteral(kCustomTypesMime)) {
type = [UTIHelper stringFromPboardType:kMozCustomTypesPboardType];
}
NSString* availableType =
[globalDragPboard availableTypeFromArray:[NSArray arrayWithObjects:(id)type, nil]];
if (availableType && IsValidType(availableType, allowFileURL)) {
*_retval = true;
}
return NS_OK;
NS_OBJC_END_TRY_BLOCK_RETURN(NS_ERROR_FAILURE);
}
Minimal test - lines (327, 491)
path: .spaces[1].metrics.nom.functions
old: 0.0
new: 1.0
path: .spaces[1].metrics.nom.total
old: 0.0
new: 1.0
path: .spaces[1].metrics.nargs.sum
old: 0.0
new: 2.0
path: .spaces[1].metrics.nargs.average
old: null
new: 2.0
path: .spaces[1].metrics.nexits.average
old: null
new: 7.0
path: .spaces[1].metrics.nexits.sum
old: 0.0
new: 7.0
path: .spaces[1].metrics.loc.blank
old: 0.0
new: 20.0
path: .spaces[1].metrics.loc.ploc
old: 5.0
new: 127.0
path: .spaces[1].metrics.loc.cloc
old: 0.0
new: 18.0
path: .spaces[1].metrics.loc.lloc
old: 0.0
new: 77.0
path: .spaces[1].metrics.loc.sloc
old: 5.0
new: 165.0
path: .spaces[1].metrics.mi.mi_visual_studio
old: 72.3204043555347
new: 20.833598713939605
path: .spaces[1].metrics.mi.mi_original
old: 123.66789144796434
new: 35.62545380083672
path: .spaces[1].metrics.mi.mi_sei
old: 102.81602157656452
new: 3.6399021109565233
path: .spaces[1].metrics.halstead.N1
old: 12.0
new: 468.0
path: .spaces[1].metrics.halstead.difficulty
old: 6.0
new: 44.716981132075475
path: .spaces[1].metrics.halstead.N2
old: 6.0
new: 316.0
path: .spaces[1].metrics.halstead.bugs
old: 0.016312752250359278
new: 1.317442394437097
path: .spaces[1].metrics.halstead.effort
old: 342.3519001557697
new: 248473.0746428383
path: .spaces[1].metrics.halstead.n1
old: 6.0
new: 30.0
path: .spaces[1].metrics.halstead.time
old: 19.019550008653873
new: 13804.059702379906
path: .spaces[1].metrics.halstead.purity_ratio
old: 1.1258145836939113
new: 1.097405977107085
path: .spaces[1].metrics.halstead.vocabulary
old: 9.0
new: 136.0
path: .spaces[1].metrics.halstead.estimated_program_length
old: 20.264662506490403
new: 860.3662860519546
path: .spaces[1].metrics.halstead.n2
old: 3.0
new: 106.0
path: .spaces[1].metrics.halstead.length
old: 18.0
new: 784.0
path: .spaces[1].metrics.halstead.volume
old: 57.05865002596162
new: 5556.570867540266
path: .spaces[1].metrics.halstead.level
old: 0.16666666666666666
new: 0.022362869198312235
path: .spaces[1].metrics.cognitive.average
old: null
new: 69.0
path: .spaces[1].metrics.cognitive.sum
old: 0.0
new: 69.0
path: .spaces[1].metrics.cyclomatic.sum
old: 1.0
new: 34.0
path: .spaces[1].metrics.cyclomatic.average
old: 1.0
new: 34.0
Code
nsDragService::GetData(nsITransferable* aTransferable, uint32_t aItemIndex) {
NS_OBJC_BEGIN_TRY_BLOCK_RETURN;
if (!aTransferable) return NS_ERROR_FAILURE;
// get flavor list that includes all acceptable flavors (including ones obtained through
// conversion)
nsTArray flavors;
nsresult rv = aTransferable->FlavorsTransferableCanImport(flavors);
if (NS_FAILED(rv)) return NS_ERROR_FAILURE;
// if this drag originated within Mozilla we should just use the cached data from
// when the drag started if possible
if (mDataItems) {
nsCOMPtr currentTransferable = do_QueryElementAt(mDataItems, aItemIndex);
if (currentTransferable) {
for (uint32_t i = 0; i < flavors.Length(); i++) {
nsCString& flavorStr = flavors[i];
nsCOMPtr dataSupports;
rv = currentTransferable->GetTransferData(flavorStr.get(), getter_AddRefs(dataSupports));
if (NS_SUCCEEDED(rv)) {
aTransferable->SetTransferData(flavorStr.get(), dataSupports);
return NS_OK; // maybe try to fill in more types? Is there a point?
}
}
}
}
// now check the actual clipboard for data
for (uint32_t i = 0; i < flavors.Length(); i++) {
nsCString& flavorStr = flavors[i];
MOZ_LOG(sCocoaLog, LogLevel::Info,
("nsDragService::GetData: looking for clipboard data of type %s\n", flavorStr.get()));
NSArray* droppedItems = [globalDragPboard pasteboardItems];
if (!droppedItems) {
continue;
}
uint32_t itemCount = [droppedItems count];
if (aItemIndex >= itemCount) {
continue;
}
NSPasteboardItem* item = [droppedItems objectAtIndex:aItemIndex];
if (!item) {
continue;
}
if (flavorStr.EqualsLiteral(kFileMime)) {
NSString* filePath = GetFilePath(item);
if (!filePath) continue;
unsigned int stringLength = [filePath length];
unsigned int dataLength = (stringLength + 1) * sizeof(char16_t); // in bytes
char16_t* clipboardDataPtr = (char16_t*)malloc(dataLength);
if (!clipboardDataPtr) return NS_ERROR_OUT_OF_MEMORY;
[filePath getCharacters:reinterpret_cast(clipboardDataPtr)];
clipboardDataPtr[stringLength] = 0; // null terminate
nsCOMPtr file;
rv = NS_NewLocalFile(nsDependentString(clipboardDataPtr), true, getter_AddRefs(file));
free(clipboardDataPtr);
if (NS_FAILED(rv)) continue;
aTransferable->SetTransferData(flavorStr.get(), file);
break;
} else if (flavorStr.EqualsLiteral(kCustomTypesMime)) {
NSString* availableType =
[item availableTypeFromArray:[NSArray arrayWithObject:kMozCustomTypesPboardType]];
if (!availableType || !IsValidType(availableType, false)) {
continue;
}
NSData* pasteboardData = [item dataForType:availableType];
if (!pasteboardData) {
continue;
}
unsigned int dataLength = [pasteboardData length];
void* clipboardDataPtr = malloc(dataLength);
if (!clipboardDataPtr) {
return NS_ERROR_OUT_OF_MEMORY;
}
[pasteboardData getBytes:clipboardDataPtr length:dataLength];
nsCOMPtr genericDataWrapper;
nsPrimitiveHelpers::CreatePrimitiveForData(flavorStr, clipboardDataPtr, dataLength,
getter_AddRefs(genericDataWrapper));
aTransferable->SetTransferData(flavorStr.get(), genericDataWrapper);
free(clipboardDataPtr);
break;
}
NSString* pString = nil;
if (flavorStr.EqualsLiteral(kUnicodeMime)) {
pString = GetStringForType(item, [UTIHelper stringFromPboardType:NSPasteboardTypeString]);
} else if (flavorStr.EqualsLiteral(kHTMLMime)) {
pString = GetStringForType(item, [UTIHelper stringFromPboardType:NSPasteboardTypeHTML]);
} else if (flavorStr.EqualsLiteral(kURLMime)) {
pString = GetStringForType(item, [UTIHelper stringFromPboardType:kPublicUrlPboardType]);
if (pString) {
NSString* title = GetTitleForURL(item);
if (!title) {
title = pString;
}
pString = [NSString stringWithFormat:@"%@\n%@", pString, title];
}
} else if (flavorStr.EqualsLiteral(kURLDataMime)) {
pString = GetStringForType(item, [UTIHelper stringFromPboardType:kPublicUrlPboardType]);
} else if (flavorStr.EqualsLiteral(kURLDescriptionMime)) {
pString = GetTitleForURL(item);
} else if (flavorStr.EqualsLiteral(kRTFMime)) {
pString = GetStringForType(item, [UTIHelper stringFromPboardType:NSPasteboardTypeRTF]);
}
if (pString) {
NSData* stringData;
if (flavorStr.EqualsLiteral(kRTFMime)) {
stringData = [pString dataUsingEncoding:NSASCIIStringEncoding];
} else {
stringData = [pString dataUsingEncoding:NSUnicodeStringEncoding];
}
unsigned int dataLength = [stringData length];
void* clipboardDataPtr = malloc(dataLength);
if (!clipboardDataPtr) return NS_ERROR_OUT_OF_MEMORY;
[stringData getBytes:clipboardDataPtr length:dataLength];
// The DOM only wants LF, so convert from MacOS line endings to DOM line endings.
int32_t signedDataLength = dataLength;
nsLinebreakHelpers::ConvertPlatformToDOMLinebreaks(flavorStr, &clipboardDataPtr,
&signedDataLength);
dataLength = signedDataLength;
// skip BOM (Byte Order Mark to distinguish little or big endian)
char16_t* clipboardDataPtrNoBOM = (char16_t*)clipboardDataPtr;
if ((dataLength > 2) &&
((clipboardDataPtrNoBOM[0] == 0xFEFF) || (clipboardDataPtrNoBOM[0] == 0xFFFE))) {
dataLength -= sizeof(char16_t);
clipboardDataPtrNoBOM += 1;
}
nsCOMPtr genericDataWrapper;
nsPrimitiveHelpers::CreatePrimitiveForData(flavorStr, clipboardDataPtrNoBOM, dataLength,
getter_AddRefs(genericDataWrapper));
aTransferable->SetTransferData(flavorStr.get(), genericDataWrapper);
free(clipboardDataPtr);
break;
}
// We have never supported this on Mac OS X, we should someday. Normally dragging images
// in is accomplished with a file path drag instead of the image data itself.
/*
if (flavorStr.EqualsLiteral(kPNGImageMime) || flavorStr.EqualsLiteral(kJPEGImageMime) ||
flavorStr.EqualsLiteral(kJPGImageMime) || flavorStr.EqualsLiteral(kGIFImageMime)) {
}
*/
}
return NS_OK;
NS_OBJC_END_TRY_BLOCK_RETURN(NS_ERROR_FAILURE);
}
Minimal test - lines (583, 633)
path: .spaces[5].metrics.cyclomatic.sum
old: 1.0
new: 6.0
path: .spaces[5].metrics.cyclomatic.average
old: 1.0
new: 6.0
path: .spaces[5].metrics.mi.mi_visual_studio
old: 73.3099929416517
new: 39.771167390864626
path: .spaces[5].metrics.mi.mi_original
old: 125.3600879302244
new: 68.00869623837852
path: .spaces[5].metrics.mi.mi_sei
old: 146.77652821395918
new: 48.361575504024586
path: .spaces[5].metrics.nexits.average
old: null
new: 0.0
path: .spaces[5].metrics.nom.total
old: 0.0
new: 1.0
path: .spaces[5].metrics.nom.functions
old: 0.0
new: 1.0
path: .spaces[5].metrics.cognitive.sum
old: 0.0
new: 6.0
path: .spaces[5].metrics.cognitive.average
old: null
new: 6.0
path: .spaces[5].metrics.nargs.sum
old: 0.0
new: 2.0
path: .spaces[5].metrics.nargs.average
old: null
new: 2.0
path: .spaces[5].metrics.halstead.length
old: 13.0
new: 229.0
path: .spaces[5].metrics.halstead.N2
old: 5.0
new: 102.0
path: .spaces[5].metrics.halstead.estimated_program_length
old: 20.264662506490403
new: 481.4866257866323
path: .spaces[5].metrics.halstead.n1
old: 6.0
new: 18.0
path: .spaces[5].metrics.halstead.purity_ratio
old: 1.558820192806954
new: 2.102561684657783
path: .spaces[5].metrics.halstead.time
old: 11.446951394097235
new: 1117.2429364649586
path: .spaces[5].metrics.halstead.n2
old: 3.0
new: 67.0
path: .spaces[5].metrics.halstead.level
old: 0.2
new: 0.07298474945533769
path: .spaces[5].metrics.halstead.bugs
old: 0.011628409247737769
new: 0.2465048643495592
path: .spaces[5].metrics.halstead.effort
old: 206.04512509375027
new: 20110.372856369253
path: .spaces[5].metrics.halstead.volume
old: 41.209025018750054
new: 1467.7505243755336
path: .spaces[5].metrics.halstead.vocabulary
old: 9.0
new: 85.0
path: .spaces[5].metrics.halstead.difficulty
old: 5.0
new: 13.701492537313433
path: .spaces[5].metrics.halstead.N1
old: 8.0
new: 127.0
path: .spaces[5].metrics.loc.lloc
old: 0.0
new: 9.0
path: .spaces[5].metrics.loc.cloc
old: 2.0
new: 6.0
path: .spaces[5].metrics.loc.sloc
old: 5.0
new: 51.0
path: .spaces[5].metrics.loc.ploc
old: 5.0
new: 37.0
path: .spaces[5].metrics.loc.blank
old: 0.0
new: 8.0
Code
void nsDragService::DragMovedWithView(NSDraggingSession* aSession, NSPoint aPoint) {
aPoint.y = nsCocoaUtils::FlippedScreenY(aPoint.y);
// XXX It feels like we should be using the backing scale factor at aPoint
// rather than the initial drag view, but I've seen no ill effects of this.
CGFloat scaleFactor = nsCocoaUtils::GetBackingScaleFactor(mNativeDragView);
LayoutDeviceIntPoint devPoint = nsCocoaUtils::CocoaPointsToDevPixels(aPoint, scaleFactor);
// If the image has changed, call enumerateDraggingItemsWithOptions to get
// the item being dragged and update its image.
if (mDragImageChanged && mNativeDragView) {
mDragImageChanged = false;
nsPresContext* pc = nullptr;
nsCOMPtr content = do_QueryInterface(mImage);
if (content) {
pc = content->OwnerDoc()->GetPresContext();
}
if (pc) {
void (^changeImageBlock)(NSDraggingItem*, NSInteger, BOOL*) =
^(NSDraggingItem* draggingItem, NSInteger idx, BOOL* stop) {
// We never add more than one item right now, but check just in case.
if (idx > 0) {
return;
}
nsPoint pt = LayoutDevicePixel::ToAppUnits(
devPoint, pc->DeviceContext()->AppUnitsPerDevPixelAtUnitFullZoom());
CSSIntPoint screenPoint = CSSIntPoint(nsPresContext::AppUnitsToIntCSSPixels(pt.x),
nsPresContext::AppUnitsToIntCSSPixels(pt.y));
// Create a new image; if one isn't returned don't change the current one.
LayoutDeviceIntRect newRect;
NSImage* image = ConstructDragImage(mSourceNode, Nothing(), screenPoint, &newRect);
if (image) {
NSRect draggingRect = nsCocoaUtils::GeckoRectToCocoaRectDevPix(newRect, scaleFactor);
[draggingItem setDraggingFrame:draggingRect contents:image];
}
};
[aSession enumerateDraggingItemsWithOptions:NSDraggingItemEnumerationConcurrent
forView:nil
classes:[NSArray arrayWithObject:[NSPasteboardItem class]]
searchOptions:@{}
usingBlock:changeImageBlock];
}
}
DragMoved(devPoint.x, devPoint.y);
}