nsresult nsSafariProfileMigrator::CopyHistoryBatched(bool aReplace) { nsCOMPtr<nsIProperties> fileLocator(do_GetService(NS_DIRECTORY_SERVICE_CONTRACTID)); nsCOMPtr<nsILocalFile> safariHistoryFile; fileLocator->Get(NS_MAC_USER_LIB_DIR, NS_GET_IID(nsILocalFile), getter_AddRefs(safariHistoryFile)); safariHistoryFile->Append(NS_LITERAL_STRING("Safari")); safariHistoryFile->Append(SAFARI_HISTORY_FILE_NAME); CFDictionaryRef safariHistory = static_cast<CFDictionaryRef>(CopyPListFromFile(safariHistoryFile)); if (!safariHistory) return NS_OK; if (!::CFDictionaryContainsKey(safariHistory, CFSTR("WebHistoryDates"))) { ::CFRelease(safariHistory); return NS_OK; } nsCOMPtr<nsIBrowserHistory> history(do_GetService(NS_GLOBALHISTORY2_CONTRACTID)); CFArrayRef children = (CFArrayRef) ::CFDictionaryGetValue(safariHistory, CFSTR("WebHistoryDates")); if (children) { CFIndex count = ::CFArrayGetCount(children); for (PRInt32 i = 0; i < count; ++i) { CFDictionaryRef entry = (CFDictionaryRef)::CFArrayGetValueAtIndex(children, i); CFStringRef lastVisitedDate = (CFStringRef) ::CFDictionaryGetValue(entry, CFSTR("lastVisitedDate")); nsAutoString url, title; if (GetDictionaryStringValue(entry, CFSTR(""), url) && GetDictionaryStringValue(entry, CFSTR("title"), title) && lastVisitedDate) { double lvd = ::CFStringGetDoubleValue(lastVisitedDate) + SAFARI_DATE_OFFSET; PRTime lastVisitTime; PRInt64 temp, million; LL_D2L(temp, lvd); LL_I2L(million, PR_USEC_PER_SEC); LL_MUL(lastVisitTime, temp, million); nsCOMPtr<nsIURI> uri; NS_NewURI(getter_AddRefs(uri), url); if (uri) history->AddPageWithDetails(uri, title.get(), lastVisitTime); } } } ::CFRelease(safariHistory); return NS_OK; }
nsresult nsSafariProfileMigrator::CopyCookies(bool aReplace) { nsCOMPtr<nsIProperties> fileLocator(do_GetService(NS_DIRECTORY_SERVICE_CONTRACTID)); nsCOMPtr<nsILocalFile> safariCookiesFile; fileLocator->Get(NS_MAC_USER_LIB_DIR, NS_GET_IID(nsILocalFile), getter_AddRefs(safariCookiesFile)); safariCookiesFile->Append(NS_LITERAL_STRING("Cookies")); safariCookiesFile->Append(SAFARI_COOKIES_FILE_NAME); CFArrayRef safariCookies = (CFArrayRef)CopyPListFromFile(safariCookiesFile); if (!safariCookies) return NS_OK; nsCOMPtr<nsICookieManager2> cookieManager(do_GetService(NS_COOKIEMANAGER_CONTRACTID)); CFIndex count = ::CFArrayGetCount(safariCookies); for (PRInt32 i = 0; i < count; ++i) { CFDictionaryRef entry = (CFDictionaryRef)::CFArrayGetValueAtIndex(safariCookies, i); CFDateRef date = (CFDateRef)::CFDictionaryGetValue(entry, CFSTR("Expires")); nsCAutoString domain, path, name, value; if (date && GetDictionaryCStringValue(entry, CFSTR("Domain"), domain, kCFStringEncodingUTF8) && GetDictionaryCStringValue(entry, CFSTR("Path"), path, kCFStringEncodingUTF8) && GetDictionaryCStringValue(entry, CFSTR("Name"), name, kCFStringEncodingASCII) && GetDictionaryCStringValue(entry, CFSTR("Value"), value, kCFStringEncodingASCII)) { PRInt64 expiryTime; LL_D2L(expiryTime, (double)::CFDateGetAbsoluteTime(date)); expiryTime += SAFARI_DATE_OFFSET; cookieManager->Add(domain, path, name, value, false, // isSecure false, // isHttpOnly false, // isSession expiryTime); } } ::CFRelease(safariCookies); return NS_OK; }
nsIVariant * convertJSValToVariant( JSContext *aCtx, jsval aValue) { if (JSVAL_IS_INT(aValue)) return new IntegerVariant(JSVAL_TO_INT(aValue)); if (JSVAL_IS_DOUBLE(aValue)) return new FloatVariant(JSVAL_TO_DOUBLE(aValue)); if (JSVAL_IS_STRING(aValue)) { JSString *str = JSVAL_TO_STRING(aValue); nsDependentJSString value; if (!value.init(aCtx, str)) return nsnull; return new TextVariant(value); } if (JSVAL_IS_BOOLEAN(aValue)) return new IntegerVariant((aValue == JSVAL_TRUE) ? 1 : 0); if (JSVAL_IS_NULL(aValue)) return new NullVariant(); if (JSVAL_IS_OBJECT(aValue)) { JSObject *obj = JSVAL_TO_OBJECT(aValue); // We only support Date instances, all others fail. if (!::js_DateIsValid(aCtx, obj)) return nsnull; double msecd = ::js_DateGetMsecSinceEpoch(aCtx, obj); msecd *= 1000.0; PRInt64 msec; LL_D2L(msec, msecd); return new IntegerVariant(msec); } return nsnull; }
nsIVariant * convertJSValToVariant( JSContext *aCtx, JS::Value aValue) { if (aValue.isInt32()) return new IntegerVariant(aValue.toInt32()); if (aValue.isDouble()) return new FloatVariant(aValue.toDouble()); if (aValue.isString()) { nsDependentJSString value; if (!value.init(aCtx, aValue)) return nullptr; return new TextVariant(value); } if (aValue.isBoolean()) return new IntegerVariant(aValue.isTrue() ? 1 : 0); if (aValue.isNull()) return new NullVariant(); if (aValue.isObject()) { JSObject* obj = &aValue.toObject(); // We only support Date instances, all others fail. if (!::js_DateIsValid(aCtx, obj)) return nullptr; double msecd = ::js_DateGetMsecSinceEpoch(aCtx, obj); msecd *= 1000.0; PRInt64 msec; LL_D2L(msec, msecd); return new IntegerVariant(msec); } return nullptr; }
NS_IMETHODIMP nsAbIPCCard::Copy(nsIAbCard *srcCard) { NS_ENSURE_ARG_POINTER(srcCard); nsresult rv; nsCOMPtr<nsIAbMDBCard> dbCard; dbCard = do_QueryInterface(srcCard, &rv); if(NS_SUCCEEDED(rv) && dbCard) { nsXPIDLString palmIDStr; nsresult rv = dbCard->GetStringAttribute(CARD_ATTRIB_PALMID, getter_Copies(palmIDStr)); if(NS_SUCCEEDED(rv) && palmIDStr.get()) { PRFloat64 f = PR_strtod(NS_LossyConvertUCS2toASCII(palmIDStr).get(), nsnull); PRInt64 l; LL_D2L(l, f); LL_L2UI(mRecordId, l); } else mRecordId = 0; // set tableID, RowID and Key for the card PRUint32 tableID=0; dbCard->GetDbTableID(&tableID); SetDbTableID(tableID); PRUint32 rowID=0; dbCard->GetDbRowID(&rowID); SetDbRowID(rowID); PRUint32 key; dbCard->GetKey(&key); SetKey(key); } PRUint32 lastModifiedDate = 0; srcCard->GetLastModifiedDate(&lastModifiedDate); mStatus = (lastModifiedDate) ? ATTR_MODIFIED : ATTR_NEW; rv = nsAbCardProperty::Copy(srcCard); // do we need to join the work and home addresses? // or split them? return rv; }
PRBool nsAbIPCCard::Same(nsIAbCard *card) { if(!card) return PR_FALSE; nsresult rv; nsCOMPtr<nsIAbMDBCard> dbCard; dbCard = do_QueryInterface(card, &rv); if(NS_SUCCEEDED(rv)) { // first check the palmID for the cards if they exist nsXPIDLString palmIDStr; rv = dbCard->GetStringAttribute(CARD_ATTRIB_PALMID, getter_Copies(palmIDStr)); if(NS_SUCCEEDED(rv) && palmIDStr.get()) { PRInt32 palmID=0; PRFloat64 f = PR_strtod(NS_LossyConvertUCS2toASCII(palmIDStr).get(), nsnull); PRInt64 l; LL_D2L(l, f); LL_L2UI(palmID, l); if(palmID && mRecordId) return mRecordId == palmID; } } nsXPIDLString str; card->GetFirstName(getter_Copies(str)); if (Compare(str, m_FirstName, nsCaseInsensitiveStringComparator())) return PR_FALSE; card->GetLastName(getter_Copies(str)); if (Compare(str, m_LastName, nsCaseInsensitiveStringComparator())) return PR_FALSE; card->GetDisplayName(getter_Copies(str)); if (Compare(str, m_DisplayName, nsCaseInsensitiveStringComparator())) return PR_FALSE; card->GetNickName(getter_Copies(str)); if (Compare(str, m_NickName, nsCaseInsensitiveStringComparator())) return PR_FALSE; return PR_TRUE; }