diff -r a63d609f5ebe -r ac0c01689b40 widget/xpwidgets/nsTransferable.cpp --- a/widget/xpwidgets/nsTransferable.cpp Thu Jan 15 15:55:04 2015 +0100 +++ b/widget/xpwidgets/nsTransferable.cpp Thu Jan 15 15:59:08 2015 +0100 @@ -55,6 +55,28 @@ } //------------------------------------------------------------------------- +// The SetData method is overloaded to indicate private browsing mode +// while achieving some semblance of (private) interface compatibility. +//------------------------------------------------------------------------- +void +DataStruct::SetData ( nsISupports* aData, uint32_t aDataLen, bool aIsPrivBrowsing ) +{ + // Now, check to see if we consider the data to be "too large" + // as well as ensuring that private browsing mode is disabled + if (aDataLen > kLargeDatasetSize && aIsPrivBrowsing == false) { + // if so, cache it to disk instead of memory + if ( NS_SUCCEEDED(WriteCache(aData, aDataLen)) ) + return; + else + NS_WARNING("Oh no, couldn't write data to the cache file"); + } + + mData = aData; + mDataLen = aDataLen; +} + + +//------------------------------------------------------------------------- void DataStruct::SetData ( nsISupports* aData, uint32_t aDataLen ) { @@ -398,11 +420,17 @@ // first check our intrinsic flavors to see if one has been registered. uint32_t i = 0; + bool aIsPrivBrowsing = false; for (i = 0; i < mDataArray.Length(); ++i) { DataStruct& data = mDataArray.ElementAt(i); if ( data.GetFlavor().Equals(aFlavor) ) { - data.SetData ( aData, aDataLen ); - return NS_OK; + if ( NS_SUCCEEDED(GetIsPrivateData(&aIsPrivBrowsing)) ) { + data.SetData ( aData, aDataLen, aIsPrivBrowsing ); + return NS_OK; + } + else { // call to GetIsPrivateData() failed, + return NS_ERROR_FAILURE; // we didn't SetData(), generic error + } } }