diff --git a/DEPS b/DEPS index d15ebe2..567719e 100644 --- a/DEPS +++ b/DEPS
@@ -232,7 +232,7 @@ Var('chromium_git') + '/native_client/src/third_party/scons-2.0.1.git' + '@' + '1c1550e17fc26355d08627fbdec13d8291227067', 'src/third_party/webrtc': - Var('chromium_git') + '/external/webrtc/trunk/webrtc.git' + '@' + '9c8feae48b530e67829cd753aefdaca958437402', # commit position 16974 + Var('chromium_git') + '/external/webrtc/trunk/webrtc.git' + '@' + '59324a62dc4b926f3a3cd37fcbac0418ea6ab01a', # commit position 16996 'src/third_party/openmax_dl': Var('chromium_git') + '/external/webrtc/deps/third_party/openmax.git' + '@' + Var('openmax_dl_revision'),
diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn index 59e5f97..f321c0c 100644 --- a/chrome/android/BUILD.gn +++ b/chrome/android/BUILD.gn
@@ -249,6 +249,7 @@ "//chrome:page_info_connection_type_javagen", "//chrome:website_settings_action_javagen", "//components/browsing_data/core:browsing_data_utils_java", + "//components/browsing_data/core:clear_browsing_data_tab_java", "//components/infobars/core:infobar_enums_java", "//components/ntp_snippets:ntp_snippets_java_enums_srcjar", "//components/ntp_tiles:ntp_tiles_enums_java",
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/PrefServiceBridge.java b/chrome/android/java/src/org/chromium/chrome/browser/preferences/PrefServiceBridge.java index 9ae7199..94d9ee4 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/preferences/PrefServiceBridge.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/preferences/PrefServiceBridge.java
@@ -523,7 +523,7 @@ } /** - * @param Whether Contextual Search should be enabled. + * @param enabled Whether Contextual Search should be enabled. */ public void setContextualSearchState(boolean enabled) { setContextualSearchPreference(enabled @@ -545,7 +545,7 @@ } /** - * @param Whether Safe Browsing Extended Reporting should be enabled. + * @param enabled Whether Safe Browsing Extended Reporting should be enabled. */ public void setSafeBrowsingExtendedReportingEnabled(boolean enabled) { nativeSetSafeBrowsingExtendedReportingEnabled(enabled); @@ -566,7 +566,7 @@ } /** - * @param Whether Safe Browsing should be enabled. + * @param enabled Whether Safe Browsing should be enabled. */ public void setSafeBrowsingEnabled(boolean enabled) { nativeSetSafeBrowsingEnabled(enabled); @@ -663,38 +663,47 @@ * Checks the state of deletion preference for a certain browsing data type. * @param dataType The requested browsing data type (from the shared enum * {@link org.chromium.chrome.browser.browsing_data.BrowsingDataType}). + * @param clearBrowsingDataTab Indicates if this is a checkbox on the default, basic or advanced + * tab to apply the right preference. * @return The state of the corresponding deletion preference. */ - public boolean getBrowsingDataDeletionPreference(int dataType) { - return nativeGetBrowsingDataDeletionPreference(dataType); + public boolean getBrowsingDataDeletionPreference(int dataType, int clearBrowsingDataTab) { + return nativeGetBrowsingDataDeletionPreference(dataType, clearBrowsingDataTab); } /** * Sets the state of deletion preference for a certain browsing data type. * @param dataType The requested browsing data type (from the shared enum * {@link org.chromium.chrome.browser.browsing_data.BrowsingDataType}). + * @param clearBrowsingDataTab Indicates if this is a checkbox on the default, basic or advanced + * tab to apply the right preference. * @param value The state to be set. */ - public void setBrowsingDataDeletionPreference(int dataType, boolean value) { - nativeSetBrowsingDataDeletionPreference(dataType, value); + public void setBrowsingDataDeletionPreference( + int dataType, int clearBrowsingDataTab, boolean value) { + nativeSetBrowsingDataDeletionPreference(dataType, clearBrowsingDataTab, value); } /** * Gets the time period for which browsing data will be deleted. + * @param clearBrowsingDataTab Indicates if this is a timeperiod on the default, basic or + * advanced tab to apply the right preference. * @return The currently selected browsing data deletion time period (from the shared enum * {@link org.chromium.chrome.browser.browsing_data.TimePeriod}). */ - public int getBrowsingDataDeletionTimePeriod() { - return nativeGetBrowsingDataDeletionTimePeriod(); + public int getBrowsingDataDeletionTimePeriod(int clearBrowsingDataTab) { + return nativeGetBrowsingDataDeletionTimePeriod(clearBrowsingDataTab); } /** * Sets the time period for which browsing data will be deleted. + * @param clearBrowsingDataTab Indicates if this is a timeperiod on the default, basic or + * advanced tab to apply the right preference. * @param timePeriod The selected browsing data deletion time period (from the shared enum * {@link org.chromium.chrome.browser.browsing_data.TimePeriod}). */ - public void setBrowsingDataDeletionTimePeriod(int timePeriod) { - nativeSetBrowsingDataDeletionTimePeriod(timePeriod); + public void setBrowsingDataDeletionTimePeriod(int clearBrowsingDataTab, int timePeriod) { + nativeSetBrowsingDataDeletionTimePeriod(clearBrowsingDataTab, timePeriod); } /** @@ -756,6 +765,14 @@ } /** + * Migrate browsing data preferences when the new "clear browsing data" dialog with tabs is + * visited. + */ + public void migrateBrowsingDataPreferences() { + nativeMigrateBrowsingDataPreferences(); + } + + /** * @return Whether browser history can be deleted by the user. */ public boolean canDeleteBrowsingHistory() { @@ -1112,15 +1129,19 @@ private native void nativeSetTranslateEnabled(boolean enabled); private native void nativeResetTranslateDefaults(); private native void nativeMigrateJavascriptPreference(); - private native boolean nativeGetBrowsingDataDeletionPreference(int dataType); - private native void nativeSetBrowsingDataDeletionPreference(int dataType, boolean value); - private native int nativeGetBrowsingDataDeletionTimePeriod(); - private native void nativeSetBrowsingDataDeletionTimePeriod(int timePeriod); + private native boolean nativeGetBrowsingDataDeletionPreference( + int dataType, int clearBrowsingDataTab); + private native void nativeSetBrowsingDataDeletionPreference( + int dataType, int clearBrowsingDataTab, boolean value); + private native int nativeGetBrowsingDataDeletionTimePeriod(int clearBrowsingDataTab); + private native void nativeSetBrowsingDataDeletionTimePeriod( + int clearBrowsingDataTab, int timePeriod); private native void nativeClearBrowsingData(int[] dataTypes, int timePeriod, String[] blacklistDomains, int[] blacklistedDomainReasons, String[] ignoredDomains, int[] ignoredDomainReasons); private native int nativeGetLastClearBrowsingDataTab(); private native void nativeSetLastClearBrowsingDataTab(int lastTab); + private native void nativeMigrateBrowsingDataPreferences(); private native void nativeRequestInfoAboutOtherFormsOfBrowsingHistory( OtherFormsOfBrowsingHistoryListener listener); private native boolean nativeCanDeleteBrowsingHistory();
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/privacy/BrowsingDataCounterBridge.java b/chrome/android/java/src/org/chromium/chrome/browser/preferences/privacy/BrowsingDataCounterBridge.java index a5afb73..5042a3b2 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/preferences/privacy/BrowsingDataCounterBridge.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/preferences/privacy/BrowsingDataCounterBridge.java
@@ -29,11 +29,13 @@ * Initializes BrowsingDataCounterBridge. * @param callback A callback to call with the result when the counter finishes. * @param dataType The browsing data type to be counted (from the shared enum - * {@link org.chromium.chrome.browser.browsing_data.BrowsingDataType}). + * @param prefType The type of preference that should be handled (Default, Basic or Advanced + * from {@link org.chromium.chrome.browser.browsing_data.ClearBrowsingDataTab}). */ - public BrowsingDataCounterBridge(BrowsingDataCounterCallback callback, int dataType) { + public BrowsingDataCounterBridge( + BrowsingDataCounterCallback callback, int dataType, int prefType) { mCallback = callback; - mNativeBrowsingDataCounterBridge = nativeInit(dataType); + mNativeBrowsingDataCounterBridge = nativeInit(dataType, prefType); } /** @@ -51,6 +53,6 @@ mCallback.onCounterFinished(result); } - private native long nativeInit(int dataType); + private native long nativeInit(int dataType, int prefType); private native void nativeDestroy(long nativeBrowsingDataCounterBridge); }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/privacy/ClearBrowsingDataPreferences.java b/chrome/android/java/src/org/chromium/chrome/browser/preferences/privacy/ClearBrowsingDataPreferences.java index 4ca3e3e..3376737 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/preferences/privacy/ClearBrowsingDataPreferences.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/preferences/privacy/ClearBrowsingDataPreferences.java
@@ -19,6 +19,7 @@ import org.chromium.chrome.R; import org.chromium.chrome.browser.ChromeFeatureList; import org.chromium.chrome.browser.browsing_data.BrowsingDataType; +import org.chromium.chrome.browser.browsing_data.ClearBrowsingDataTab; import org.chromium.chrome.browser.browsing_data.TimePeriod; import org.chromium.chrome.browser.help.HelpAndFeedback; import org.chromium.chrome.browser.historyreport.AppIndexingReporter; @@ -67,7 +68,8 @@ mParent = parent; mOption = option; mCheckbox = checkbox; - mCounter = new BrowsingDataCounterBridge(this, mOption.getDataType()); + mCounter = new BrowsingDataCounterBridge( + this, mOption.getDataType(), mParent.getPreferenceType()); mCheckbox.setOnPreferenceClickListener(this); mCheckbox.setEnabled(enabled); @@ -99,7 +101,7 @@ mParent.updateButtonState(); mShouldAnnounceCounterResult = true; PrefServiceBridge.getInstance().setBrowsingDataDeletionPreference( - mOption.getDataType(), mCheckbox.isChecked()); + mOption.getDataType(), mParent.getPreferenceType(), mCheckbox.isChecked()); return true; } @@ -303,6 +305,14 @@ } /** + * Returns whether this preference page is a basic or advanced tab in order to use separate + * preferences. + */ + protected int getPreferenceType() { + return ClearBrowsingDataTab.ADVANCED; + } + + /** * Returns the Array of time periods. Options are displayed in the same order as they appear * in the array. */ @@ -332,7 +342,7 @@ */ private boolean isOptionSelectedByDefault(DialogOption option) { return PrefServiceBridge.getInstance().getBrowsingDataDeletionPreference( - option.getDataType()); + option.getDataType(), getPreferenceType()); } /** @@ -420,7 +430,7 @@ } PrefServiceBridge.getInstance().setBrowsingDataDeletionTimePeriod( - ((TimePeriodSpinnerOption) value).getTimePeriod()); + getPreferenceType(), ((TimePeriodSpinnerOption) value).getTimePeriod()); return true; } return false; @@ -461,7 +471,11 @@ && !PrefServiceBridge.getInstance().canDeleteBrowsingHistory()) { enabled = false; PrefServiceBridge.getInstance().setBrowsingDataDeletionPreference( - DialogOption.CLEAR_HISTORY.getDataType(), false); + DialogOption.CLEAR_HISTORY.getDataType(), ClearBrowsingDataTab.BASIC, + false); + PrefServiceBridge.getInstance().setBrowsingDataDeletionPreference( + DialogOption.CLEAR_HISTORY.getDataType(), ClearBrowsingDataTab.ADVANCED, + false); } mItems[i] = new Item( @@ -484,8 +498,8 @@ SpinnerPreference spinner = (SpinnerPreference) findPreference(PREF_TIME_RANGE); spinner.setOnPreferenceChangeListener(this); TimePeriodSpinnerOption[] spinnerOptions = getTimePeriodSpinnerOptions(); - int selectedTimePeriod = - PrefServiceBridge.getInstance().getBrowsingDataDeletionTimePeriod(); + int selectedTimePeriod = PrefServiceBridge.getInstance().getBrowsingDataDeletionTimePeriod( + getPreferenceType()); int spinnerOptionIndex = -1; for (int i = 0; i < spinnerOptions.length; ++i) { if (spinnerOptions[i].getTimePeriod() == selectedTimePeriod) {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/privacy/ClearBrowsingDataPreferencesAdvanced.java b/chrome/android/java/src/org/chromium/chrome/browser/preferences/privacy/ClearBrowsingDataPreferencesAdvanced.java index 76c7f1b..708bc62 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/preferences/privacy/ClearBrowsingDataPreferencesAdvanced.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/preferences/privacy/ClearBrowsingDataPreferencesAdvanced.java
@@ -4,10 +4,17 @@ package org.chromium.chrome.browser.preferences.privacy; +import org.chromium.chrome.browser.browsing_data.ClearBrowsingDataTab; + /** * A more advanced version of {@link ClearBrowsingDataPreferences} with more dialog options and less * explanatory text. */ public class ClearBrowsingDataPreferencesAdvanced extends ClearBrowsingDataPreferencesTab { // TODO(dullweber): Add more options. + + @Override + protected int getPreferenceType() { + return ClearBrowsingDataTab.ADVANCED; + } }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/privacy/ClearBrowsingDataPreferencesBasic.java b/chrome/android/java/src/org/chromium/chrome/browser/preferences/privacy/ClearBrowsingDataPreferencesBasic.java index 2a4cb11..8241c0a 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/preferences/privacy/ClearBrowsingDataPreferencesBasic.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/preferences/privacy/ClearBrowsingDataPreferencesBasic.java
@@ -4,6 +4,8 @@ package org.chromium.chrome.browser.preferences.privacy; +import org.chromium.chrome.browser.browsing_data.ClearBrowsingDataTab; + /** * A simpler version of {@link ClearBrowsingDataPreferences} with fewer dialog options and more * explanatory text. @@ -11,9 +13,12 @@ public class ClearBrowsingDataPreferencesBasic extends ClearBrowsingDataPreferencesTab { @Override protected DialogOption[] getDialogOptions() { - return new DialogOption[] { - DialogOption.CLEAR_HISTORY, DialogOption.CLEAR_COOKIES_AND_SITE_DATA, - DialogOption.CLEAR_CACHE - }; + return new DialogOption[] {DialogOption.CLEAR_HISTORY, + DialogOption.CLEAR_COOKIES_AND_SITE_DATA, DialogOption.CLEAR_CACHE}; + } + + @Override + protected int getPreferenceType() { + return ClearBrowsingDataTab.BASIC; } }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/privacy/ClearBrowsingDataTabsFragment.java b/chrome/android/java/src/org/chromium/chrome/browser/preferences/privacy/ClearBrowsingDataTabsFragment.java index 6fd0b20..c45923a9 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/preferences/privacy/ClearBrowsingDataTabsFragment.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/preferences/privacy/ClearBrowsingDataTabsFragment.java
@@ -30,8 +30,14 @@ public class ClearBrowsingDataTabsFragment extends Fragment { public static final int CBD_TAB_COUNT = 2; - public ClearBrowsingDataTabsFragment() {} + public ClearBrowsingDataTabsFragment() { + // TODO(dullweber): Remove this migration after after three milestones (probably M61) + PrefServiceBridge.getInstance().migrateBrowsingDataPreferences(); + } + /** + * @return Returns whether the CBD dialog with tabs is enabled. + */ public static boolean isFeatureEnabled() { return ChromeFeatureList.isEnabled(ChromeFeatureList.TABS_IN_CBD); }
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/preferences/privacy/ClearBrowsingDataPreferencesTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/preferences/privacy/ClearBrowsingDataPreferencesTest.java index 355f597c..c119089 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/preferences/privacy/ClearBrowsingDataPreferencesTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/preferences/privacy/ClearBrowsingDataPreferencesTest.java
@@ -23,6 +23,7 @@ import org.chromium.chrome.browser.ChromeActivity; import org.chromium.chrome.browser.ChromeFeatureList; import org.chromium.chrome.browser.ShortcutHelper; +import org.chromium.chrome.browser.browsing_data.ClearBrowsingDataTab; import org.chromium.chrome.browser.preferences.ButtonPreference; import org.chromium.chrome.browser.preferences.PrefServiceBridge; import org.chromium.chrome.browser.preferences.Preferences; @@ -605,7 +606,7 @@ for (DialogOption option : DialogOption.values()) { boolean enabled = typesToClear.contains(option); PrefServiceBridge.getInstance().setBrowsingDataDeletionPreference( - option.getDataType(), enabled); + option.getDataType(), ClearBrowsingDataTab.ADVANCED, enabled); } } });
diff --git a/chrome/browser/android/browsing_data/browsing_data_counter_bridge.cc b/chrome/browser/android/browsing_data/browsing_data_counter_bridge.cc index ffd8e91..634d172 100644 --- a/chrome/browser/android/browsing_data/browsing_data_counter_bridge.cc +++ b/chrome/browser/android/browsing_data/browsing_data_counter_bridge.cc
@@ -10,21 +10,31 @@ #include "chrome/browser/profiles/profile.h" #include "chrome/browser/profiles/profile_manager.h" #include "chrome/common/pref_names.h" -#include "components/browsing_data/core/browsing_data_utils.h" #include "jni/BrowsingDataCounterBridge_jni.h" using base::android::JavaParamRef; using base::android::ScopedJavaLocalRef; BrowsingDataCounterBridge::BrowsingDataCounterBridge( - JNIEnv* env, const JavaParamRef<jobject>& obj, jint data_type) + JNIEnv* env, + const JavaParamRef<jobject>& obj, + jint data_type, + jint clear_browsing_data_tab) : jobject_(obj) { DCHECK_GE(data_type, 0); - DCHECK_LT(data_type, browsing_data::NUM_TYPES); + DCHECK_LT(data_type, + static_cast<int>(browsing_data::BrowsingDataType::NUM_TYPES)); + DCHECK_GE(clear_browsing_data_tab, 0); + DCHECK_LT(clear_browsing_data_tab, + static_cast<int>(browsing_data::ClearBrowsingDataTab::NUM_TYPES)); + + clear_browsing_data_tab_ = + static_cast<browsing_data::ClearBrowsingDataTab>(clear_browsing_data_tab); std::string pref; if (!browsing_data::GetDeletionPreferenceFromDataType( - static_cast<browsing_data::BrowsingDataType>(data_type), &pref)) { + static_cast<browsing_data::BrowsingDataType>(data_type), + clear_browsing_data_tab_, &pref)) { return; } @@ -35,7 +45,7 @@ if (!counter_) return; - counter_->Init(profile->GetPrefs(), + counter_->Init(profile->GetPrefs(), clear_browsing_data_tab_, base::Bind(&BrowsingDataCounterBridge::onCounterFinished, base::Unretained(this))); counter_->Restart(); @@ -64,8 +74,10 @@ result_string); } -static jlong Init( - JNIEnv* env, const JavaParamRef<jobject>& obj, int data_type) { - return reinterpret_cast<intptr_t>( - new BrowsingDataCounterBridge(env, obj, data_type)); +static jlong Init(JNIEnv* env, + const JavaParamRef<jobject>& obj, + jint data_type, + jint clear_browsing_data_tab) { + return reinterpret_cast<intptr_t>(new BrowsingDataCounterBridge( + env, obj, data_type, clear_browsing_data_tab)); }
diff --git a/chrome/browser/android/browsing_data/browsing_data_counter_bridge.h b/chrome/browser/android/browsing_data/browsing_data_counter_bridge.h index 6c55f58..ba6a631 100644 --- a/chrome/browser/android/browsing_data/browsing_data_counter_bridge.h +++ b/chrome/browser/android/browsing_data/browsing_data_counter_bridge.h
@@ -7,6 +7,7 @@ #include "base/android/jni_weak_ref.h" #include "base/android/scoped_java_ref.h" +#include "components/browsing_data/core/browsing_data_utils.h" #include "components/browsing_data/core/counters/browsing_data_counter.h" // This class is a wrapper for BrowsingDataCounter (C++ backend) to be used by @@ -15,10 +16,10 @@ public: // Creates a BrowsingDataCounterBridge for a certain browsing data type. // The |data_type| is a value of the enum BrowsingDataType. - BrowsingDataCounterBridge( - JNIEnv* env, - const base::android::JavaParamRef<jobject>& obj, - jint data_type); + BrowsingDataCounterBridge(JNIEnv* env, + const base::android::JavaParamRef<jobject>& obj, + jint data_type, + jint clear_browsing_data_tab); ~BrowsingDataCounterBridge(); @@ -33,6 +34,7 @@ base::android::ScopedJavaGlobalRef<jobject> jobject_; std::unique_ptr<browsing_data::BrowsingDataCounter> counter_; + browsing_data::ClearBrowsingDataTab clear_browsing_data_tab_; DISALLOW_COPY_AND_ASSIGN(BrowsingDataCounterBridge); };
diff --git a/chrome/browser/android/preferences/pref_service_bridge.cc b/chrome/browser/android/preferences/pref_service_bridge.cc index c18908ba..01f7fd7f 100644 --- a/chrome/browser/android/preferences/pref_service_bridge.cc +++ b/chrome/browser/android/preferences/pref_service_bridge.cc
@@ -132,6 +132,15 @@ return GetOriginalProfile()->GetPrefs(); } +browsing_data::ClearBrowsingDataTab ToTabEnum(jint clear_browsing_data_tab) { + DCHECK_GE(clear_browsing_data_tab, 0); + DCHECK_LT(clear_browsing_data_tab, + static_cast<int>(browsing_data::ClearBrowsingDataTab::NUM_TYPES)); + + return static_cast<browsing_data::ClearBrowsingDataTab>( + clear_browsing_data_tab); +} + } // namespace // ---------------------------------------------------------------------------- @@ -539,9 +548,11 @@ static jboolean GetBrowsingDataDeletionPreference( JNIEnv* env, const JavaParamRef<jobject>& obj, - jint data_type) { + jint data_type, + jint clear_browsing_data_tab) { DCHECK_GE(data_type, 0); - DCHECK_LT(data_type, browsing_data::NUM_TYPES); + DCHECK_LT(data_type, + static_cast<int>(browsing_data::BrowsingDataType::NUM_TYPES)); // If there is no corresponding preference for this |data_type|, pretend // that it's set to false. @@ -549,43 +560,50 @@ // data types for consistency. std::string pref; if (!browsing_data::GetDeletionPreferenceFromDataType( - static_cast<browsing_data::BrowsingDataType>(data_type), &pref)) { + static_cast<browsing_data::BrowsingDataType>(data_type), + ToTabEnum(clear_browsing_data_tab), &pref)) { return false; } return GetOriginalProfile()->GetPrefs()->GetBoolean(pref); } -static void SetBrowsingDataDeletionPreference( - JNIEnv* env, - const JavaParamRef<jobject>& obj, - jint data_type, - jboolean value) { +static void SetBrowsingDataDeletionPreference(JNIEnv* env, + const JavaParamRef<jobject>& obj, + jint data_type, + jint clear_browsing_data_tab, + jboolean value) { DCHECK_GE(data_type, 0); - DCHECK_LT(data_type, browsing_data::NUM_TYPES); + DCHECK_LT(data_type, + static_cast<int>(browsing_data::BrowsingDataType::NUM_TYPES)); std::string pref; if (!browsing_data::GetDeletionPreferenceFromDataType( - static_cast<browsing_data::BrowsingDataType>(data_type), &pref)) { + static_cast<browsing_data::BrowsingDataType>(data_type), + ToTabEnum(clear_browsing_data_tab), &pref)) { return; } GetOriginalProfile()->GetPrefs()->SetBoolean(pref, value); } -static jint GetBrowsingDataDeletionTimePeriod( - JNIEnv* env, - const JavaParamRef<jobject>& obj) { - return GetPrefService()->GetInteger(browsing_data::prefs::kDeleteTimePeriod); +static jint GetBrowsingDataDeletionTimePeriod(JNIEnv* env, + const JavaParamRef<jobject>& obj, + jint clear_browsing_data_tab) { + return GetPrefService()->GetInteger( + browsing_data::GetTimePeriodPreferenceName( + ToTabEnum(clear_browsing_data_tab))); } -static void SetBrowsingDataDeletionTimePeriod( - JNIEnv* env, - const JavaParamRef<jobject>& obj, - jint time_period) { +static void SetBrowsingDataDeletionTimePeriod(JNIEnv* env, + const JavaParamRef<jobject>& obj, + jint clear_browsing_data_tab, + jint time_period) { DCHECK_GE(time_period, 0); - DCHECK_LE(time_period, browsing_data::TIME_PERIOD_LAST); - GetPrefService()->SetInteger(browsing_data::prefs::kDeleteTimePeriod, + DCHECK_LE(time_period, + static_cast<int>(browsing_data::TimePeriod::TIME_PERIOD_LAST)); + GetPrefService()->SetInteger(browsing_data::GetTimePeriodPreferenceName( + ToTabEnum(clear_browsing_data_tab)), time_period); } @@ -604,6 +622,11 @@ tab_index); } +static void MigrateBrowsingDataPreferences(JNIEnv* env, + const JavaParamRef<jobject>& obj) { + browsing_data::MigratePreferencesToBasic(GetOriginalProfile()->GetPrefs()); +} + static void ClearBrowsingData( JNIEnv* env, const JavaParamRef<jobject>& obj, @@ -622,27 +645,27 @@ int remove_mask = 0; for (const int data_type : data_types_vector) { switch (static_cast<browsing_data::BrowsingDataType>(data_type)) { - case browsing_data::HISTORY: + case browsing_data::BrowsingDataType::HISTORY: remove_mask |= BrowsingDataRemover::REMOVE_HISTORY; break; - case browsing_data::CACHE: + case browsing_data::BrowsingDataType::CACHE: remove_mask |= BrowsingDataRemover::REMOVE_CACHE; break; - case browsing_data::COOKIES: + case browsing_data::BrowsingDataType::COOKIES: remove_mask |= BrowsingDataRemover::REMOVE_COOKIES; remove_mask |= BrowsingDataRemover::REMOVE_SITE_DATA; break; - case browsing_data::PASSWORDS: + case browsing_data::BrowsingDataType::PASSWORDS: remove_mask |= BrowsingDataRemover::REMOVE_PASSWORDS; break; - case browsing_data::FORM_DATA: + case browsing_data::BrowsingDataType::FORM_DATA: remove_mask |= BrowsingDataRemover::REMOVE_FORM_DATA; break; - case browsing_data::BOOKMARKS: + case browsing_data::BrowsingDataType::BOOKMARKS: // Bookmarks are deleted separately on the Java side. NOTREACHED(); break; - case browsing_data::NUM_TYPES: + case browsing_data::BrowsingDataType::NUM_TYPES: NOTREACHED(); } }
diff --git a/chrome/browser/browsing_data/autofill_counter_browsertest.cc b/chrome/browser/browsing_data/autofill_counter_browsertest.cc index 6e3e1c6..d85c8896 100644 --- a/chrome/browser/browsing_data/autofill_counter_browsertest.cc +++ b/chrome/browser/browsing_data/autofill_counter_browsertest.cc
@@ -36,7 +36,7 @@ browser()->profile(), ServiceAccessType::IMPLICIT_ACCESS); SetAutofillDeletionPref(true); - SetDeletionPeriodPref(browsing_data::ALL_TIME); + SetDeletionPeriodPref(browsing_data::TimePeriod::ALL_TIME); } // Autocomplete suggestions -------------------------------------------------- @@ -205,8 +205,9 @@ IN_PROC_BROWSER_TEST_F(AutofillCounterTest, AutocompleteSuggestions) { Profile* profile = browser()->profile(); browsing_data::AutofillCounter counter(GetWebDataService()); - counter.Init(profile->GetPrefs(), base::Bind(&AutofillCounterTest::Callback, - base::Unretained(this))); + counter.Init( + profile->GetPrefs(), browsing_data::ClearBrowsingDataTab::ADVANCED, + base::Bind(&AutofillCounterTest::Callback, base::Unretained(this))); counter.Restart(); WaitForCounting(); EXPECT_EQ(0, GetNumSuggestions()); @@ -241,8 +242,9 @@ IN_PROC_BROWSER_TEST_F(AutofillCounterTest, CreditCards) { Profile* profile = browser()->profile(); browsing_data::AutofillCounter counter(GetWebDataService()); - counter.Init(profile->GetPrefs(), base::Bind(&AutofillCounterTest::Callback, - base::Unretained(this))); + counter.Init( + profile->GetPrefs(), browsing_data::ClearBrowsingDataTab::ADVANCED, + base::Bind(&AutofillCounterTest::Callback, base::Unretained(this))); counter.Restart(); WaitForCounting(); EXPECT_EQ(0, GetNumCreditCards()); @@ -277,8 +279,9 @@ IN_PROC_BROWSER_TEST_F(AutofillCounterTest, Addresses) { Profile* profile = browser()->profile(); browsing_data::AutofillCounter counter(GetWebDataService()); - counter.Init(profile->GetPrefs(), base::Bind(&AutofillCounterTest::Callback, - base::Unretained(this))); + counter.Init( + profile->GetPrefs(), browsing_data::ClearBrowsingDataTab::ADVANCED, + base::Bind(&AutofillCounterTest::Callback, base::Unretained(this))); counter.Restart(); WaitForCounting(); EXPECT_EQ(0, GetNumAddresses()); @@ -327,8 +330,9 @@ Profile* profile = browser()->profile(); browsing_data::AutofillCounter counter(GetWebDataService()); - counter.Init(profile->GetPrefs(), base::Bind(&AutofillCounterTest::Callback, - base::Unretained(this))); + counter.Init( + profile->GetPrefs(), browsing_data::ClearBrowsingDataTab::ADVANCED, + base::Bind(&AutofillCounterTest::Callback, base::Unretained(this))); counter.Restart(); WaitForCounting(); EXPECT_EQ(5, GetNumSuggestions()); @@ -382,8 +386,9 @@ Profile* profile = browser()->profile(); browsing_data::AutofillCounter counter(GetWebDataService()); - counter.Init(profile->GetPrefs(), base::Bind(&AutofillCounterTest::Callback, - base::Unretained(this))); + counter.Init( + profile->GetPrefs(), browsing_data::ClearBrowsingDataTab::ADVANCED, + base::Bind(&AutofillCounterTest::Callback, base::Unretained(this))); for (const TestCase& test_case : test_cases) { counter.SetPeriodStartForTesting(test_case.period_start);
diff --git a/chrome/browser/browsing_data/browsing_data_counter_factory.cc b/chrome/browser/browsing_data/browsing_data_counter_factory.cc index e9d0be0a..2cdc16c 100644 --- a/chrome/browser/browsing_data/browsing_data_counter_factory.cc +++ b/chrome/browser/browsing_data/browsing_data_counter_factory.cc
@@ -46,7 +46,8 @@ if (!AreCountersEnabled()) return nullptr; - if (pref_name == browsing_data::prefs::kDeleteBrowsingHistory) { + if (pref_name == browsing_data::prefs::kDeleteBrowsingHistory || + pref_name == browsing_data::prefs::kDeleteBrowsingHistoryBasic) { return base::MakeUnique<browsing_data::HistoryCounter>( HistoryServiceFactory::GetForProfile( profile, ServiceAccessType::EXPLICIT_ACCESS), @@ -55,7 +56,8 @@ ProfileSyncServiceFactory::GetForProfile(profile)); } - if (pref_name == browsing_data::prefs::kDeleteCache) + if (pref_name == browsing_data::prefs::kDeleteCache || + pref_name == browsing_data::prefs::kDeleteCacheBasic) return base::MakeUnique<CacheCounter>(profile); if (pref_name == browsing_data::prefs::kDeletePasswords) {
diff --git a/chrome/browser/browsing_data/browsing_data_counter_utils.cc b/chrome/browser/browsing_data/browsing_data_counter_utils.cc index c28ccea..568b30e 100644 --- a/chrome/browser/browsing_data/browsing_data_counter_utils.cc +++ b/chrome/browser/browsing_data/browsing_data_counter_utils.cc
@@ -61,7 +61,8 @@ return l10n_util::GetStringUTF16(IDS_CLEAR_BROWSING_DATA_CALCULATING); } - if (pref_name == browsing_data::prefs::kDeleteCache) { + if (pref_name == browsing_data::prefs::kDeleteCache || + pref_name == browsing_data::prefs::kDeleteCacheBasic) { // Cache counter. const auto* cache_result = static_cast<const CacheCounter::CacheResult*>(result);
diff --git a/chrome/browser/browsing_data/browsing_data_remover.h b/chrome/browser/browsing_data/browsing_data_remover.h index 335844d..b811122 100644 --- a/chrome/browser/browsing_data/browsing_data_remover.h +++ b/chrome/browser/browsing_data/browsing_data_remover.h
@@ -10,6 +10,7 @@ #include "base/time/time.h" #include "build/build_config.h" #include "chrome/browser/browsing_data/browsing_data_remover_delegate.h" +#include "components/keyed_service/core/keyed_service.h" namespace content { class BrowsingDataFilterBuilder; @@ -50,7 +51,7 @@ // // TODO(crbug.com/668114): BrowsingDataRemover does not currently support plugin // data deletion. Use PluginDataRemover instead. -class BrowsingDataRemover { +class BrowsingDataRemover : public KeyedService { public: // Mask used for Remove. enum RemoveDataMask {
diff --git a/chrome/browser/browsing_data/browsing_data_remover_browsertest.cc b/chrome/browser/browsing_data/browsing_data_remover_browsertest.cc index 69a1b303..cdde107 100644 --- a/chrome/browser/browsing_data/browsing_data_remover_browsertest.cc +++ b/chrome/browser/browsing_data/browsing_data_remover_browsertest.cc
@@ -105,6 +105,7 @@ Profile* profile = browser()->profile(); CacheCounter counter(profile); counter.Init(profile->GetPrefs(), + browsing_data::ClearBrowsingDataTab::ADVANCED, base::Bind(&BrowsingDataRemoverBrowserTest::OnCacheSizeResult, base::Unretained(this), base::Unretained(&run_loop), base::Unretained(&size)));
diff --git a/chrome/browser/browsing_data/browsing_data_remover_factory.cc b/chrome/browser/browsing_data/browsing_data_remover_factory.cc index b171158..d9edc87 100644 --- a/chrome/browser/browsing_data/browsing_data_remover_factory.cc +++ b/chrome/browser/browsing_data/browsing_data_remover_factory.cc
@@ -46,7 +46,7 @@ // static BrowsingDataRemover* BrowsingDataRemoverFactory::GetForBrowserContext( content::BrowserContext* context) { - return static_cast<BrowsingDataRemoverImpl*>( + return static_cast<BrowsingDataRemover*>( GetInstance()->GetServiceForBrowserContext(context, true)); }
diff --git a/chrome/browser/browsing_data/browsing_data_remover_impl.h b/chrome/browser/browsing_data/browsing_data_remover_impl.h index 334c7f0..9015d1b 100644 --- a/chrome/browser/browsing_data/browsing_data_remover_impl.h +++ b/chrome/browser/browsing_data/browsing_data_remover_impl.h
@@ -19,7 +19,6 @@ #include "build/build_config.h" #include "chrome/browser/browsing_data/browsing_data_remover.h" #include "chrome/common/features.h" -#include "components/keyed_service/core/keyed_service.h" #include "ppapi/features/features.h" #include "storage/common/quota/quota_types.h" #include "url/gurl.h" @@ -32,9 +31,7 @@ class StoragePartition; } -class BrowsingDataRemoverImpl : - public BrowsingDataRemover, - public KeyedService { +class BrowsingDataRemoverImpl : public BrowsingDataRemover { public: // The completion inhibitor can artificially delay completion of the browsing // data removal process. It is used during testing to simulate scenarios in
diff --git a/chrome/browser/browsing_data/cache_counter.cc b/chrome/browser/browsing_data/cache_counter.cc index 1c2f5e80..557be8a3 100644 --- a/chrome/browser/browsing_data/cache_counter.cc +++ b/chrome/browser/browsing_data/cache_counter.cc
@@ -26,7 +26,9 @@ } const char* CacheCounter::GetPrefName() const { - return browsing_data::prefs::kDeleteCache; + return GetTab() == browsing_data::ClearBrowsingDataTab::BASIC + ? browsing_data::prefs::kDeleteCacheBasic + : browsing_data::prefs::kDeleteCache; } void CacheCounter::Count() {
diff --git a/chrome/browser/browsing_data/cache_counter_browsertest.cc b/chrome/browser/browsing_data/cache_counter_browsertest.cc index 36204115..29fca83 100644 --- a/chrome/browser/browsing_data/cache_counter_browsertest.cc +++ b/chrome/browser/browsing_data/cache_counter_browsertest.cc
@@ -34,7 +34,7 @@ public: void SetUpOnMainThread() override { SetCacheDeletionPref(true); - SetDeletionPeriodPref(browsing_data::ALL_TIME); + SetDeletionPeriodPref(browsing_data::TimePeriod::ALL_TIME); } void SetCacheDeletionPref(bool value) { @@ -183,7 +183,7 @@ CacheCounter counter(profile); counter.Init( - profile->GetPrefs(), + profile->GetPrefs(), browsing_data::ClearBrowsingDataTab::ADVANCED, base::Bind(&CacheCounterTest::CountingCallback, base::Unretained(this))); counter.Restart(); @@ -198,7 +198,7 @@ Profile* profile = browser()->profile(); CacheCounter counter(profile); counter.Init( - profile->GetPrefs(), + profile->GetPrefs(), browsing_data::ClearBrowsingDataTab::ADVANCED, base::Bind(&CacheCounterTest::CountingCallback, base::Unretained(this))); counter.Restart(); @@ -214,7 +214,7 @@ Profile* profile = browser()->profile(); CacheCounter counter(profile); counter.Init( - profile->GetPrefs(), + profile->GetPrefs(), browsing_data::ClearBrowsingDataTab::ADVANCED, base::Bind(&CacheCounterTest::CountingCallback, base::Unretained(this))); browsing_data::StoragePartitionHttpCacheDataRemover::CreateForRange( @@ -236,7 +236,7 @@ Profile* profile = browser()->profile(); CacheCounter counter(profile); counter.Init( - profile->GetPrefs(), + profile->GetPrefs(), browsing_data::ClearBrowsingDataTab::ADVANCED, base::Bind(&CacheCounterTest::CountingCallback, base::Unretained(this))); SetCacheDeletionPref(true); @@ -251,26 +251,26 @@ Profile* profile = browser()->profile(); CacheCounter counter(profile); counter.Init( - profile->GetPrefs(), + profile->GetPrefs(), browsing_data::ClearBrowsingDataTab::ADVANCED, base::Bind(&CacheCounterTest::CountingCallback, base::Unretained(this))); - SetDeletionPeriodPref(browsing_data::LAST_HOUR); + SetDeletionPeriodPref(browsing_data::TimePeriod::LAST_HOUR); WaitForIOThread(); browsing_data::BrowsingDataCounter::ResultInt result = GetResult(); - SetDeletionPeriodPref(browsing_data::LAST_DAY); + SetDeletionPeriodPref(browsing_data::TimePeriod::LAST_DAY); WaitForIOThread(); EXPECT_EQ(result, GetResult()); - SetDeletionPeriodPref(browsing_data::LAST_WEEK); + SetDeletionPeriodPref(browsing_data::TimePeriod::LAST_WEEK); WaitForIOThread(); EXPECT_EQ(result, GetResult()); - SetDeletionPeriodPref(browsing_data::FOUR_WEEKS); + SetDeletionPeriodPref(browsing_data::TimePeriod::FOUR_WEEKS); WaitForIOThread(); EXPECT_EQ(result, GetResult()); - SetDeletionPeriodPref(browsing_data::ALL_TIME); + SetDeletionPeriodPref(browsing_data::TimePeriod::ALL_TIME); WaitForIOThread(); EXPECT_EQ(result, GetResult()); EXPECT_FALSE(IsUpperLimit());
diff --git a/chrome/browser/browsing_data/downloads_counter_browsertest.cc b/chrome/browser/browsing_data/downloads_counter_browsertest.cc index ec0da22d..fb1e2a1b 100644 --- a/chrome/browser/browsing_data/downloads_counter_browsertest.cc +++ b/chrome/browser/browsing_data/downloads_counter_browsertest.cc
@@ -46,7 +46,7 @@ content::BrowserContext::GetDownloadManager( browser()->profile()->GetOffTheRecordProfile()); SetDownloadsDeletionPref(true); - SetDeletionPeriodPref(browsing_data::ALL_TIME); + SetDeletionPeriodPref(browsing_data::TimePeriod::ALL_TIME); } void TearDownOnMainThread() override { @@ -248,6 +248,7 @@ Profile* profile = browser()->profile(); DownloadsCounter counter(profile); counter.Init(profile->GetPrefs(), + browsing_data::ClearBrowsingDataTab::ADVANCED, base::Bind(&DownloadsCounterTest::ResultCallback, base::Unretained(this))); counter.Restart(); @@ -277,6 +278,7 @@ Profile* profile = browser()->profile(); DownloadsCounter counter(profile); counter.Init(profile->GetPrefs(), + browsing_data::ClearBrowsingDataTab::ADVANCED, base::Bind(&DownloadsCounterTest::ResultCallback, base::Unretained(this))); @@ -312,6 +314,7 @@ Profile* profile = browser()->profile(); DownloadsCounter counter(profile); counter.Init(profile->GetPrefs(), + browsing_data::ClearBrowsingDataTab::ADVANCED, base::Bind(&DownloadsCounterTest::ResultCallback, base::Unretained(this))); @@ -361,22 +364,23 @@ Profile* profile = browser()->profile(); DownloadsCounter counter(profile); counter.Init(profile->GetPrefs(), + browsing_data::ClearBrowsingDataTab::ADVANCED, base::Bind(&DownloadsCounterTest::ResultCallback, base::Unretained(this))); - SetDeletionPeriodPref(browsing_data::LAST_HOUR); + SetDeletionPeriodPref(browsing_data::TimePeriod::LAST_HOUR); EXPECT_EQ(2u, GetResult()); - SetDeletionPeriodPref(browsing_data::LAST_DAY); + SetDeletionPeriodPref(browsing_data::TimePeriod::LAST_DAY); EXPECT_EQ(5u, GetResult()); - SetDeletionPeriodPref(browsing_data::LAST_WEEK); + SetDeletionPeriodPref(browsing_data::TimePeriod::LAST_WEEK); EXPECT_EQ(7u, GetResult()); - SetDeletionPeriodPref(browsing_data::FOUR_WEEKS); + SetDeletionPeriodPref(browsing_data::TimePeriod::FOUR_WEEKS); EXPECT_EQ(8u, GetResult()); - SetDeletionPeriodPref(browsing_data::ALL_TIME); + SetDeletionPeriodPref(browsing_data::TimePeriod::ALL_TIME); EXPECT_EQ(11u, GetResult()); }
diff --git a/chrome/browser/browsing_data/history_counter_browsertest.cc b/chrome/browser/browsing_data/history_counter_browsertest.cc index 2fcb864..b5a0a32 100644 --- a/chrome/browser/browsing_data/history_counter_browsertest.cc +++ b/chrome/browser/browsing_data/history_counter_browsertest.cc
@@ -49,7 +49,7 @@ browser()->profile()->GetRequestContext())); SetHistoryDeletionPref(true); - SetDeletionPeriodPref(browsing_data::ALL_TIME); + SetDeletionPeriodPref(browsing_data::TimePeriod::ALL_TIME); } void AddVisit(const std::string url) { @@ -181,8 +181,9 @@ base::Unretained(profile)), ProfileSyncServiceFactory::GetForProfile(profile)); - counter.Init(profile->GetPrefs(), base::Bind(&HistoryCounterTest::Callback, - base::Unretained(this))); + counter.Init( + profile->GetPrefs(), browsing_data::ClearBrowsingDataTab::ADVANCED, + base::Bind(&HistoryCounterTest::Callback, base::Unretained(this))); counter.Restart(); WaitForCounting(); @@ -205,8 +206,9 @@ base::Unretained(profile)), ProfileSyncServiceFactory::GetForProfile(profile)); - counter.Init(profile->GetPrefs(), base::Bind(&HistoryCounterTest::Callback, - base::Unretained(this))); + counter.Init( + profile->GetPrefs(), browsing_data::ClearBrowsingDataTab::ADVANCED, + base::Bind(&HistoryCounterTest::Callback, base::Unretained(this))); SetHistoryDeletionPref(true); WaitForCounting(); @@ -246,26 +248,27 @@ base::Unretained(profile)), ProfileSyncServiceFactory::GetForProfile(profile)); - counter.Init(profile->GetPrefs(), base::Bind(&HistoryCounterTest::Callback, - base::Unretained(this))); + counter.Init( + profile->GetPrefs(), browsing_data::ClearBrowsingDataTab::ADVANCED, + base::Bind(&HistoryCounterTest::Callback, base::Unretained(this))); - SetDeletionPeriodPref(browsing_data::LAST_HOUR); + SetDeletionPeriodPref(browsing_data::TimePeriod::LAST_HOUR); WaitForCounting(); EXPECT_EQ(1u, GetLocalResult()); - SetDeletionPeriodPref(browsing_data::LAST_DAY); + SetDeletionPeriodPref(browsing_data::TimePeriod::LAST_DAY); WaitForCounting(); EXPECT_EQ(1u, GetLocalResult()); - SetDeletionPeriodPref(browsing_data::LAST_WEEK); + SetDeletionPeriodPref(browsing_data::TimePeriod::LAST_WEEK); WaitForCounting(); EXPECT_EQ(5u, GetLocalResult()); - SetDeletionPeriodPref(browsing_data::FOUR_WEEKS); + SetDeletionPeriodPref(browsing_data::TimePeriod::FOUR_WEEKS); WaitForCounting(); EXPECT_EQ(8u, GetLocalResult()); - SetDeletionPeriodPref(browsing_data::ALL_TIME); + SetDeletionPeriodPref(browsing_data::TimePeriod::ALL_TIME); WaitForCounting(); EXPECT_EQ(9u, GetLocalResult()); } @@ -284,8 +287,9 @@ false), ProfileSyncServiceFactory::GetForProfile(profile)); - counter.Init(profile->GetPrefs(), base::Bind(&HistoryCounterTest::Callback, - base::Unretained(this))); + counter.Init( + profile->GetPrefs(), browsing_data::ClearBrowsingDataTab::ADVANCED, + base::Bind(&HistoryCounterTest::Callback, base::Unretained(this))); history::FakeWebHistoryService* service = static_cast<history::FakeWebHistoryService*>(GetFakeWebHistoryService( @@ -300,7 +304,7 @@ // No entries locally. There are some entries in Sync, but they are out of the // time range. - SetDeletionPeriodPref(browsing_data::LAST_HOUR); + SetDeletionPeriodPref(browsing_data::TimePeriod::LAST_HOUR); service->AddSyncedVisit( "www.google.com", GetCurrentTime() - base::TimeDelta::FromHours(2)); service->AddSyncedVisit( @@ -375,8 +379,9 @@ true), sync_service); - counter.Init(profile->GetPrefs(), base::Bind(&HistoryCounterTest::Callback, - base::Unretained(this))); + counter.Init( + profile->GetPrefs(), browsing_data::ClearBrowsingDataTab::ADVANCED, + base::Bind(&HistoryCounterTest::Callback, base::Unretained(this))); // Note that some Sync operations notify observers immediately (and thus there // is no need to call |WaitForCounting()|; in fact, it would block the test),
diff --git a/chrome/browser/browsing_data/hosted_apps_counter_unittest.cc b/chrome/browser/browsing_data/hosted_apps_counter_unittest.cc index c997eaf2..1aa7b6c 100644 --- a/chrome/browser/browsing_data/hosted_apps_counter_unittest.cc +++ b/chrome/browser/browsing_data/hosted_apps_counter_unittest.cc
@@ -35,7 +35,7 @@ extension_registry_ = extensions::ExtensionRegistry::Get(profile_.get()); SetHostedAppsDeletionPref(true); - SetDeletionPeriodPref(browsing_data::ALL_TIME); + SetDeletionPeriodPref(browsing_data::TimePeriod::ALL_TIME); } // Adding and removing apps and extensions. ---------------------------------- @@ -152,8 +152,9 @@ TEST_F(HostedAppsCounterTest, Count) { Profile* profile = GetProfile(); HostedAppsCounter counter(profile); - counter.Init(profile->GetPrefs(), base::Bind(&HostedAppsCounterTest::Callback, - base::Unretained(this))); + counter.Init( + profile->GetPrefs(), browsing_data::ClearBrowsingDataTab::ADVANCED, + base::Bind(&HostedAppsCounterTest::Callback, base::Unretained(this))); counter.Restart(); EXPECT_EQ(0u, GetNumHostedApps()); @@ -178,8 +179,9 @@ TEST_F(HostedAppsCounterTest, OnlyHostedApps) { Profile* profile = GetProfile(); HostedAppsCounter counter(profile); - counter.Init(profile->GetPrefs(), base::Bind(&HostedAppsCounterTest::Callback, - base::Unretained(this))); + counter.Init( + profile->GetPrefs(), browsing_data::ClearBrowsingDataTab::ADVANCED, + base::Bind(&HostedAppsCounterTest::Callback, base::Unretained(this))); AddHostedApp(); // 1 AddExtension(); @@ -215,8 +217,9 @@ TEST_F(HostedAppsCounterTest, Examples) { Profile* profile = GetProfile(); HostedAppsCounter counter(profile); - counter.Init(profile->GetPrefs(), base::Bind(&HostedAppsCounterTest::Callback, - base::Unretained(this))); + counter.Init( + profile->GetPrefs(), browsing_data::ClearBrowsingDataTab::ADVANCED, + base::Bind(&HostedAppsCounterTest::Callback, base::Unretained(this))); counter.Restart(); EXPECT_EQ(0u, GetExamples().size());
diff --git a/chrome/browser/browsing_data/media_licenses_counter_browsertest.cc b/chrome/browser/browsing_data/media_licenses_counter_browsertest.cc index b638711..f96758f 100644 --- a/chrome/browser/browsing_data/media_licenses_counter_browsertest.cc +++ b/chrome/browser/browsing_data/media_licenses_counter_browsertest.cc
@@ -156,6 +156,7 @@ Profile* profile = browser()->profile(); MediaLicensesCounter counter(profile); counter.Init(profile->GetPrefs(), + browsing_data::ClearBrowsingDataTab::ADVANCED, base::Bind(&MediaLicensesCounterTest::CountingCallback, base::Unretained(this))); counter.Restart(); @@ -174,6 +175,7 @@ Profile* profile = browser()->profile(); MediaLicensesCounter counter(profile); counter.Init(profile->GetPrefs(), + browsing_data::ClearBrowsingDataTab::ADVANCED, base::Bind(&MediaLicensesCounterTest::CountingCallback, base::Unretained(this))); counter.Restart(); @@ -193,6 +195,7 @@ Profile* profile = browser()->profile(); MediaLicensesCounter counter(profile); counter.Init(profile->GetPrefs(), + browsing_data::ClearBrowsingDataTab::ADVANCED, base::Bind(&MediaLicensesCounterTest::CountingCallback, base::Unretained(this))); SetMediaLicenseDeletionPref(true);
diff --git a/chrome/browser/browsing_data/mock_browsing_data_remover.h b/chrome/browser/browsing_data/mock_browsing_data_remover.h index e220a082..fa1f8bfa 100644 --- a/chrome/browser/browsing_data/mock_browsing_data_remover.h +++ b/chrome/browser/browsing_data/mock_browsing_data_remover.h
@@ -8,7 +8,6 @@ #include <list> #include "chrome/browser/browsing_data/browsing_data_remover.h" -#include "components/keyed_service/core/keyed_service.h" namespace content { class BrowserContext; @@ -17,8 +16,7 @@ // A BrowsingDataRemover that only records Remove*() calls. // Some of the other methods are NOTIMPLEMENTED() as they are not needed for // existing testcases. -class MockBrowsingDataRemover : public BrowsingDataRemover, - public KeyedService { +class MockBrowsingDataRemover : public BrowsingDataRemover { public: explicit MockBrowsingDataRemover(content::BrowserContext* context);
diff --git a/chrome/browser/browsing_data/passwords_counter_browsertest.cc b/chrome/browser/browsing_data/passwords_counter_browsertest.cc index 01e7511..8f5b994 100644 --- a/chrome/browser/browsing_data/passwords_counter_browsertest.cc +++ b/chrome/browser/browsing_data/passwords_counter_browsertest.cc
@@ -28,7 +28,7 @@ store_ = PasswordStoreFactory::GetForProfile( browser()->profile(), ServiceAccessType::IMPLICIT_ACCESS); SetPasswordsDeletionPref(true); - SetDeletionPeriodPref(browsing_data::ALL_TIME); + SetDeletionPeriodPref(browsing_data::TimePeriod::ALL_TIME); } void AddLogin(const std::string& origin, @@ -140,8 +140,9 @@ Profile* profile = browser()->profile(); browsing_data::PasswordsCounter counter(PasswordStoreFactory::GetForProfile( profile, ServiceAccessType::EXPLICIT_ACCESS)); - counter.Init(profile->GetPrefs(), base::Bind(&PasswordsCounterTest::Callback, - base::Unretained(this))); + counter.Init( + profile->GetPrefs(), browsing_data::ClearBrowsingDataTab::ADVANCED, + base::Bind(&PasswordsCounterTest::Callback, base::Unretained(this))); counter.Restart(); WaitForCounting(); @@ -159,8 +160,9 @@ browsing_data::PasswordsCounter counter(PasswordStoreFactory::GetForProfile( profile, ServiceAccessType::EXPLICIT_ACCESS)); - counter.Init(profile->GetPrefs(), base::Bind(&PasswordsCounterTest::Callback, - base::Unretained(this))); + counter.Init( + profile->GetPrefs(), browsing_data::ClearBrowsingDataTab::ADVANCED, + base::Bind(&PasswordsCounterTest::Callback, base::Unretained(this))); counter.Restart(); WaitForCounting(); @@ -178,8 +180,9 @@ Profile* profile = browser()->profile(); browsing_data::PasswordsCounter counter(PasswordStoreFactory::GetForProfile( profile, ServiceAccessType::EXPLICIT_ACCESS)); - counter.Init(profile->GetPrefs(), base::Bind(&PasswordsCounterTest::Callback, - base::Unretained(this))); + counter.Init( + profile->GetPrefs(), browsing_data::ClearBrowsingDataTab::ADVANCED, + base::Bind(&PasswordsCounterTest::Callback, base::Unretained(this))); SetPasswordsDeletionPref(true); WaitForCounting(); @@ -195,8 +198,9 @@ Profile* profile = browser()->profile(); browsing_data::PasswordsCounter counter(PasswordStoreFactory::GetForProfile( profile, ServiceAccessType::EXPLICIT_ACCESS)); - counter.Init(profile->GetPrefs(), base::Bind(&PasswordsCounterTest::Callback, - base::Unretained(this))); + counter.Init( + profile->GetPrefs(), browsing_data::ClearBrowsingDataTab::ADVANCED, + base::Bind(&PasswordsCounterTest::Callback, base::Unretained(this))); counter.Restart(); WaitForCounting(); @@ -226,26 +230,27 @@ Profile* profile = browser()->profile(); browsing_data::PasswordsCounter counter(PasswordStoreFactory::GetForProfile( profile, ServiceAccessType::EXPLICIT_ACCESS)); - counter.Init(profile->GetPrefs(), base::Bind(&PasswordsCounterTest::Callback, - base::Unretained(this))); + counter.Init( + profile->GetPrefs(), browsing_data::ClearBrowsingDataTab::ADVANCED, + base::Bind(&PasswordsCounterTest::Callback, base::Unretained(this))); - SetDeletionPeriodPref(browsing_data::LAST_HOUR); + SetDeletionPeriodPref(browsing_data::TimePeriod::LAST_HOUR); WaitForCounting(); EXPECT_EQ(1u, GetResult()); - SetDeletionPeriodPref(browsing_data::LAST_DAY); + SetDeletionPeriodPref(browsing_data::TimePeriod::LAST_DAY); WaitForCounting(); EXPECT_EQ(1u, GetResult()); - SetDeletionPeriodPref(browsing_data::LAST_WEEK); + SetDeletionPeriodPref(browsing_data::TimePeriod::LAST_WEEK); WaitForCounting(); EXPECT_EQ(3u, GetResult()); - SetDeletionPeriodPref(browsing_data::FOUR_WEEKS); + SetDeletionPeriodPref(browsing_data::TimePeriod::FOUR_WEEKS); WaitForCounting(); EXPECT_EQ(3u, GetResult()); - SetDeletionPeriodPref(browsing_data::ALL_TIME); + SetDeletionPeriodPref(browsing_data::TimePeriod::ALL_TIME); WaitForCounting(); EXPECT_EQ(4u, GetResult()); }
diff --git a/chrome/browser/certificate_manager_model.cc b/chrome/browser/certificate_manager_model.cc index 84e26ca..4aad791 100644 --- a/chrome/browser/certificate_manager_model.cc +++ b/chrome/browser/certificate_manager_model.cc
@@ -23,7 +23,6 @@ #include "content/public/browser/browser_thread.h" #include "content/public/browser/resource_context.h" #include "crypto/nss_util.h" -#include "net/base/crypto_module.h" #include "net/base/net_errors.h" #include "net/cert/x509_certificate.h" #include "ui/base/l10n/l10n_util.h"
diff --git a/chrome/browser/chromeos/platform_keys/platform_keys_nss.cc b/chrome/browser/chromeos/platform_keys/platform_keys_nss.cc index 755e86c..3c6cf43 100644 --- a/chrome/browser/chromeos/platform_keys/platform_keys_nss.cc +++ b/chrome/browser/chromeos/platform_keys/platform_keys_nss.cc
@@ -37,7 +37,6 @@ #include "content/public/browser/browser_thread.h" #include "crypto/nss_key_util.h" #include "crypto/scoped_nss_types.h" -#include "net/base/crypto_module.h" #include "net/base/net_errors.h" #include "net/cert/cert_database.h" #include "net/cert/nss_cert_database.h"
diff --git a/chrome/browser/extensions/api/browsing_data/browsing_data_api.cc b/chrome/browser/extensions/api/browsing_data/browsing_data_api.cc index e8474db..36610d5 100644 --- a/chrome/browser/extensions/api/browsing_data/browsing_data_api.cc +++ b/chrome/browser/extensions/api/browsing_data/browsing_data_api.cc
@@ -145,7 +145,7 @@ browsing_data::TimePeriod period = static_cast<browsing_data::TimePeriod>(period_pref); double since = 0; - if (period != browsing_data::ALL_TIME) { + if (period != browsing_data::TimePeriod::ALL_TIME) { base::Time time = browsing_data::CalculateBeginDeleteTime(period); since = time.ToJsTime(); }
diff --git a/chrome/browser/extensions/api/browsing_data/browsing_data_test.cc b/chrome/browser/extensions/api/browsing_data/browsing_data_test.cc index 10efc18..9a90887 100644 --- a/chrome/browser/extensions/api/browsing_data/browsing_data_test.cc +++ b/chrome/browser/extensions/api/browsing_data/browsing_data_test.cc
@@ -120,7 +120,8 @@ void SetSinceAndVerify(browsing_data::TimePeriod since_pref) { PrefService* prefs = browser()->profile()->GetPrefs(); - prefs->SetInteger(browsing_data::prefs::kDeleteTimePeriod, since_pref); + prefs->SetInteger(browsing_data::prefs::kDeleteTimePeriod, + static_cast<int>(since_pref)); scoped_refptr<BrowsingDataSettingsFunction> function = new BrowsingDataSettingsFunction(); @@ -136,7 +137,7 @@ EXPECT_TRUE(options->GetDouble("since", &since)); double expected_since = 0; - if (since_pref != browsing_data::ALL_TIME) { + if (since_pref != browsing_data::TimePeriod::ALL_TIME) { base::Time time = CalculateBeginDeleteTime(since_pref); expected_since = time.ToJsTime(); } @@ -456,11 +457,11 @@ // Test the processing of the 'delete since' preference. IN_PROC_BROWSER_TEST_F(ExtensionBrowsingDataTest, SettingsFunctionSince) { - SetSinceAndVerify(browsing_data::ALL_TIME); - SetSinceAndVerify(browsing_data::LAST_HOUR); - SetSinceAndVerify(browsing_data::LAST_DAY); - SetSinceAndVerify(browsing_data::LAST_WEEK); - SetSinceAndVerify(browsing_data::FOUR_WEEKS); + SetSinceAndVerify(browsing_data::TimePeriod::ALL_TIME); + SetSinceAndVerify(browsing_data::TimePeriod::LAST_HOUR); + SetSinceAndVerify(browsing_data::TimePeriod::LAST_DAY); + SetSinceAndVerify(browsing_data::TimePeriod::LAST_WEEK); + SetSinceAndVerify(browsing_data::TimePeriod::FOUR_WEEKS); } IN_PROC_BROWSER_TEST_F(ExtensionBrowsingDataTest, SettingsFunctionEmpty) {
diff --git a/chrome/browser/net/sdch_browsertest.cc b/chrome/browser/net/sdch_browsertest.cc index 74ad70d..0966cc4 100644 --- a/chrome/browser/net/sdch_browsertest.cc +++ b/chrome/browser/net/sdch_browsertest.cc
@@ -409,10 +409,12 @@ BrowsingDataRemover* remover = BrowsingDataRemoverFactory::GetForBrowserContext(browser()->profile()); BrowsingDataRemoverCompletionObserver completion_observer(remover); - remover->RemoveAndReply( - browsing_data::CalculateBeginDeleteTime(browsing_data::LAST_HOUR), - browsing_data::CalculateEndDeleteTime(browsing_data::LAST_HOUR), - remove_mask, BrowsingDataHelper::UNPROTECTED_WEB, &completion_observer); + remover->RemoveAndReply(browsing_data::CalculateBeginDeleteTime( + browsing_data::TimePeriod::LAST_HOUR), + browsing_data::CalculateEndDeleteTime( + browsing_data::TimePeriod::LAST_HOUR), + remove_mask, BrowsingDataHelper::UNPROTECTED_WEB, + &completion_observer); completion_observer.BlockUntilCompletion(); }
diff --git a/chrome/browser/policy/configuration_policy_handler_list_factory.cc b/chrome/browser/policy/configuration_policy_handler_list_factory.cc index 0375932..d45468b5 100644 --- a/chrome/browser/policy/configuration_policy_handler_list_factory.cc +++ b/chrome/browser/policy/configuration_policy_handler_list_factory.cc
@@ -734,8 +734,9 @@ !deleting_history_allowed) { prefs->SetBoolean( browsing_data::prefs::kDeleteBrowsingHistory, false); - prefs->SetBoolean( - browsing_data::prefs::kDeleteDownloadHistory, false); + prefs->SetBoolean(browsing_data::prefs::kDeleteBrowsingHistoryBasic, + false); + prefs->SetBoolean(browsing_data::prefs::kDeleteDownloadHistory, false); } } };
diff --git a/chrome/browser/policy/policy_browsertest.cc b/chrome/browser/policy/policy_browsertest.cc index d72125b..4ccdbb0 100644 --- a/chrome/browser/policy/policy_browsertest.cc +++ b/chrome/browser/policy/policy_browsertest.cc
@@ -95,6 +95,7 @@ #include "chrome/test/base/search_test_utils.h" #include "chrome/test/base/ui_test_utils.h" #include "components/bookmarks/common/bookmark_pref_names.h" +#include "components/browsing_data/core/pref_names.h" #include "components/component_updater/component_updater_service.h" #include "components/content_settings/core/common/content_settings.h" #include "components/content_settings/core/common/content_settings_pattern.h" @@ -2219,6 +2220,54 @@ EXPECT_EQ(url, enumerator2.urls()[0]); } +IN_PROC_BROWSER_TEST_F(PolicyTest, DeletingBrowsingHistoryDisabled) { + // Verifies that deleting the browsing history can be disabled. + + PrefService* prefs = browser()->profile()->GetPrefs(); + EXPECT_FALSE(prefs->IsManagedPreference(prefs::kAllowDeletingBrowserHistory)); + EXPECT_TRUE(prefs->GetBoolean(prefs::kAllowDeletingBrowserHistory)); + + EXPECT_TRUE(prefs->GetBoolean(browsing_data::prefs::kDeleteBrowsingHistory)); + EXPECT_TRUE(prefs->GetBoolean(browsing_data::prefs::kDeleteDownloadHistory)); + EXPECT_TRUE( + prefs->GetBoolean(browsing_data::prefs::kDeleteBrowsingHistoryBasic)); + + PolicyMap policies; + policies.Set(key::kAllowDeletingBrowserHistory, POLICY_LEVEL_MANDATORY, + POLICY_SCOPE_USER, POLICY_SOURCE_CLOUD, + base::MakeUnique<base::Value>(true), nullptr); + UpdateProviderPolicy(policies); + EXPECT_TRUE(prefs->IsManagedPreference(prefs::kAllowDeletingBrowserHistory)); + EXPECT_TRUE(prefs->GetBoolean(prefs::kAllowDeletingBrowserHistory)); + + EXPECT_TRUE(prefs->GetBoolean(browsing_data::prefs::kDeleteBrowsingHistory)); + EXPECT_TRUE(prefs->GetBoolean(browsing_data::prefs::kDeleteDownloadHistory)); + EXPECT_TRUE( + prefs->GetBoolean(browsing_data::prefs::kDeleteBrowsingHistoryBasic)); + + policies.Set(key::kAllowDeletingBrowserHistory, POLICY_LEVEL_MANDATORY, + POLICY_SCOPE_USER, POLICY_SOURCE_CLOUD, + base::MakeUnique<base::Value>(false), nullptr); + UpdateProviderPolicy(policies); + EXPECT_TRUE(prefs->IsManagedPreference(prefs::kAllowDeletingBrowserHistory)); + EXPECT_FALSE(prefs->GetBoolean(prefs::kAllowDeletingBrowserHistory)); + + EXPECT_FALSE(prefs->GetBoolean(browsing_data::prefs::kDeleteBrowsingHistory)); + EXPECT_FALSE(prefs->GetBoolean(browsing_data::prefs::kDeleteDownloadHistory)); + EXPECT_FALSE( + prefs->GetBoolean(browsing_data::prefs::kDeleteBrowsingHistoryBasic)); + + policies.Clear(); + UpdateProviderPolicy(policies); + EXPECT_FALSE(prefs->IsManagedPreference(prefs::kAllowDeletingBrowserHistory)); + EXPECT_TRUE(prefs->GetBoolean(prefs::kAllowDeletingBrowserHistory)); + + EXPECT_TRUE(prefs->GetBoolean(browsing_data::prefs::kDeleteBrowsingHistory)); + EXPECT_TRUE(prefs->GetBoolean(browsing_data::prefs::kDeleteDownloadHistory)); + EXPECT_TRUE( + prefs->GetBoolean(browsing_data::prefs::kDeleteBrowsingHistoryBasic)); +} + // TODO(port): Test corresponding bubble translate UX: http://crbug.com/383235 #if !defined(USE_AURA) // http://crbug.com/241691 PolicyTest.TranslateEnabled is failing regularly.
diff --git a/chrome/browser/safe_browsing/settings_reset_prompt/settings_reset_prompt_model.cc b/chrome/browser/safe_browsing/settings_reset_prompt/settings_reset_prompt_model.cc index 807a38e..d402584 100644 --- a/chrome/browser/safe_browsing/settings_reset_prompt/settings_reset_prompt_model.cc +++ b/chrome/browser/safe_browsing/settings_reset_prompt/settings_reset_prompt_model.cc
@@ -16,7 +16,11 @@ #include "chrome/browser/profile_resetter/resettable_settings_snapshot.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/safe_browsing/settings_reset_prompt/settings_reset_prompt_config.h" +#include "chrome/browser/search_engines/template_url_service_factory.h" #include "chrome/common/extensions/manifest_handlers/settings_overrides_handler.h" +#include "chrome/common/pref_names.h" +#include "components/prefs/pref_service.h" +#include "components/search_engines/template_url_service.h" #include "components/url_formatter/url_fixer.h" #include "content/public/browser/browser_thread.h" #include "extensions/browser/extension_registry.h" @@ -322,8 +326,24 @@ InitExtensionData(); - // TODO(alito): Figure out cases where settings cannot be reset, for example - // due to policy or extensions that cannot be disabled. + if (!SomeSettingRequiresReset()) + return; + + // For now, during the experimental phase, if policy controls any of the + // settings that we consider for reset (search, startup pages, homepage) or if + // an extension that needs to be disabled is managed by policy, then we do not + // show the reset prompt. + // + // TODO(alito): Consider how clients with policies should be prompted for + // reset. + if (SomeSettingIsManaged() || SomeExtensionMustRemainEnabled()) { + if (homepage_reset_state_ == RESET_REQUIRED) + homepage_reset_state_ = NO_RESET_REQUIRED_DUE_TO_POLICY; + if (default_search_reset_state_ == RESET_REQUIRED) + default_search_reset_state_ = NO_RESET_REQUIRED_DUE_TO_POLICY; + if (startup_urls_reset_state_ == RESET_REQUIRED) + startup_urls_reset_state_ = NO_RESET_REQUIRED_DUE_TO_POLICY; + } } void SettingsResetPromptModel::InitDefaultSearchData() { @@ -458,4 +478,46 @@ homepage_reset_state_ == RESET_REQUIRED; } +bool SettingsResetPromptModel::SomeSettingIsManaged() const { + PrefService* prefs = profile_->GetPrefs(); + DCHECK(prefs); + + // Check if homepage is managed. + const PrefService::Preference* homepage = + prefs->FindPreference(prefs::kHomePage); + if (homepage && (homepage->IsManaged() || homepage->IsManagedByCustodian())) + return true; + + // Check if startup pages are managed. + if (SessionStartupPref::TypeIsManaged(prefs) || + SessionStartupPref::URLsAreManaged(prefs)) { + return true; + } + + // Check if default search is managed. + TemplateURLService* service = + TemplateURLServiceFactory::GetForProfile(profile_); + if (service && service->is_default_search_managed()) + return true; + + return false; +} + +bool SettingsResetPromptModel::SomeExtensionMustRemainEnabled() const { + extensions::ManagementPolicy* management_policy = + extensions::ExtensionSystem::Get(profile_)->management_policy(); + + if (management_policy) { + for (const auto& item : extensions_to_disable()) { + const extensions::ExtensionId& extension_id = item.first; + const extensions::Extension* extension = + GetExtension(profile_, extension_id); + if (extension && management_policy->MustRemainEnabled(extension, nullptr)) + return true; + } + } + + return false; +} + } // namespace safe_browsing.
diff --git a/chrome/browser/safe_browsing/settings_reset_prompt/settings_reset_prompt_model.h b/chrome/browser/safe_browsing/settings_reset_prompt/settings_reset_prompt_model.h index 207447e5..771531a 100644 --- a/chrome/browser/safe_browsing/settings_reset_prompt/settings_reset_prompt_model.h +++ b/chrome/browser/safe_browsing/settings_reset_prompt/settings_reset_prompt_model.h
@@ -47,6 +47,7 @@ NO_RESET_REQUIRED_DUE_TO_ALREADY_PROMPTED_FOR_SETTING = 3, NO_RESET_REQUIRED_DUE_TO_RECENTLY_PROMPTED = 4, NO_RESET_REQUIRED_DUE_TO_OTHER_SETTING_REQUIRING_RESET = 5, + NO_RESET_REQUIRED_DUE_TO_POLICY = 6, }; using ExtensionMap = @@ -135,6 +136,9 @@ // Return true if any setting's reset state is set to |RESET_REQUIRED|. bool SomeSettingRequiresReset() const; + bool SomeSettingIsManaged() const; + bool SomeExtensionMustRemainEnabled() const; + Profile* const profile_; SettingsResetPromptPrefsManager prefs_manager_;
diff --git a/chrome/browser/ssl/chrome_ssl_host_state_delegate_test.cc b/chrome/browser/ssl/chrome_ssl_host_state_delegate_test.cc index 3d6b219..c505b2c18 100644 --- a/chrome/browser/ssl/chrome_ssl_host_state_delegate_test.cc +++ b/chrome/browser/ssl/chrome_ssl_host_state_delegate_test.cc
@@ -619,11 +619,13 @@ BrowsingDataRemover* remover = BrowsingDataRemoverFactory::GetForBrowserContext(profile); BrowsingDataRemoverCompletionObserver completion_observer(remover); - remover->RemoveAndReply( - browsing_data::CalculateBeginDeleteTime(browsing_data::LAST_HOUR), - browsing_data::CalculateEndDeleteTime(browsing_data::LAST_HOUR), - BrowsingDataRemover::REMOVE_HISTORY, - BrowsingDataHelper::UNPROTECTED_WEB, &completion_observer); + remover->RemoveAndReply(browsing_data::CalculateBeginDeleteTime( + browsing_data::TimePeriod::LAST_HOUR), + browsing_data::CalculateEndDeleteTime( + browsing_data::TimePeriod::LAST_HOUR), + BrowsingDataRemover::REMOVE_HISTORY, + BrowsingDataHelper::UNPROTECTED_WEB, + &completion_observer); completion_observer.BlockUntilCompletion(); } };
diff --git a/chrome/browser/ssl/ssl_browser_tests.cc b/chrome/browser/ssl/ssl_browser_tests.cc index 821b5ae..ad0ecec8 100644 --- a/chrome/browser/ssl/ssl_browser_tests.cc +++ b/chrome/browser/ssl/ssl_browser_tests.cc
@@ -114,7 +114,6 @@ #if defined(USE_NSS_CERTS) #include "chrome/browser/net/nss_context.h" -#include "net/base/crypto_module.h" #include "net/cert/nss_cert_database.h" #endif // defined(USE_NSS_CERTS)
diff --git a/chrome/browser/ui/crypto_module_password_dialog_nss.cc b/chrome/browser/ui/crypto_module_password_dialog_nss.cc index b211d9f..d2438f8 100644 --- a/chrome/browser/ui/crypto_module_password_dialog_nss.cc +++ b/chrome/browser/ui/crypto_module_password_dialog_nss.cc
@@ -10,7 +10,6 @@ #include "base/bind.h" #include "base/logging.h" #include "content/public/browser/browser_thread.h" -#include "net/base/crypto_module.h" #include "net/cert/x509_certificate.h" using content::BrowserThread;
diff --git a/chrome/browser/ui/webui/options/certificate_manager_handler.cc b/chrome/browser/ui/webui/options/certificate_manager_handler.cc index 5648100..799151c 100644 --- a/chrome/browser/ui/webui/options/certificate_manager_handler.cc +++ b/chrome/browser/ui/webui/options/certificate_manager_handler.cc
@@ -36,7 +36,6 @@ #include "components/strings/grit/components_strings.h" #include "content/public/browser/browser_thread.h" #include "content/public/browser/web_contents.h" -#include "net/base/crypto_module.h" #include "net/base/net_errors.h" #include "net/cert/x509_certificate.h" #include "net/der/input.h"
diff --git a/chrome/browser/ui/webui/options/clear_browser_data_handler.cc b/chrome/browser/ui/webui/options/clear_browser_data_handler.cc index 416515f..4037188 100644 --- a/chrome/browser/ui/webui/options/clear_browser_data_handler.cc +++ b/chrome/browser/ui/webui/options/clear_browser_data_handler.cc
@@ -375,6 +375,7 @@ DCHECK(AreCountersEnabled()); counter->Init(Profile::FromWebUI(web_ui())->GetPrefs(), + browsing_data::ClearBrowsingDataTab::ADVANCED, base::Bind(&ClearBrowserDataHandler::UpdateCounterText, base::Unretained(this))); counters_.push_back(std::move(counter));
diff --git a/chrome/browser/ui/webui/settings/certificates_handler.cc b/chrome/browser/ui/webui/settings/certificates_handler.cc index d1bcacb..37922e3 100644 --- a/chrome/browser/ui/webui/settings/certificates_handler.cc +++ b/chrome/browser/ui/webui/settings/certificates_handler.cc
@@ -35,7 +35,6 @@ #include "chrome/grit/generated_resources.h" #include "content/public/browser/browser_thread.h" #include "content/public/browser/web_contents.h" -#include "net/base/crypto_module.h" #include "net/base/net_errors.h" #include "net/cert/x509_certificate.h" #include "net/der/input.h"
diff --git a/chrome/browser/ui/webui/settings/settings_clear_browsing_data_handler.cc b/chrome/browser/ui/webui/settings/settings_clear_browsing_data_handler.cc index ea54ef4..dd8d078d 100644 --- a/chrome/browser/ui/webui/settings/settings_clear_browsing_data_handler.cc +++ b/chrome/browser/ui/webui/settings/settings_clear_browsing_data_handler.cc
@@ -317,6 +317,7 @@ void ClearBrowsingDataHandler::AddCounter( std::unique_ptr<browsing_data::BrowsingDataCounter> counter) { counter->Init(profile_->GetPrefs(), + browsing_data::ClearBrowsingDataTab::ADVANCED, base::Bind(&ClearBrowsingDataHandler::UpdateCounterText, base::Unretained(this))); counters_.push_back(std::move(counter)); @@ -325,8 +326,7 @@ void ClearBrowsingDataHandler::UpdateCounterText( std::unique_ptr<browsing_data::BrowsingDataCounter::Result> result) { CallJavascriptFunction( - "cr.webUIListenerCallback", - base::StringValue("update-counter-text"), + "cr.webUIListenerCallback", base::StringValue("update-counter-text"), base::StringValue(result->source()->GetPrefName()), base::StringValue(GetChromeCounterTextFromResult(result.get()))); }
diff --git a/chrome/install_static/install_util.cc b/chrome/install_static/install_util.cc index 0def16a..5848021 100644 --- a/chrome/install_static/install_util.cc +++ b/chrome/install_static/install_util.cc
@@ -501,7 +501,7 @@ DWORD dummy = 0; DWORD length = ::GetFileVersionInfoSize(exe_path.c_str(), &dummy); if (length) { - std::unique_ptr<char> data(new char[length]); + std::unique_ptr<char[]> data(new char[length]); if (::GetFileVersionInfo(exe_path.c_str(), dummy, length, data.get())) { GetValueFromVersionResource(data.get(), L"ProductVersion", version);
diff --git a/chromeos/network/onc/onc_certificate_importer_impl.cc b/chromeos/network/onc/onc_certificate_importer_impl.cc index 1f04a696..0542be3 100644 --- a/chromeos/network/onc/onc_certificate_importer_impl.cc +++ b/chromeos/network/onc/onc_certificate_importer_impl.cc
@@ -22,7 +22,6 @@ #include "chromeos/network/network_event_log.h" #include "chromeos/network/onc/onc_utils.h" #include "crypto/scoped_nss_types.h" -#include "net/base/crypto_module.h" #include "net/base/net_errors.h" #include "net/cert/nss_cert_database.h" #include "net/cert/x509_certificate.h"
diff --git a/chromeos/network/onc/onc_certificate_importer_impl_unittest.cc b/chromeos/network/onc/onc_certificate_importer_impl_unittest.cc index aa148e4..b8e1b0eb 100644 --- a/chromeos/network/onc/onc_certificate_importer_impl_unittest.cc +++ b/chromeos/network/onc/onc_certificate_importer_impl_unittest.cc
@@ -19,7 +19,6 @@ #include "chromeos/network/onc/onc_test_utils.h" #include "components/onc/onc_constants.h" #include "crypto/scoped_test_nss_db.h" -#include "net/base/crypto_module.h" #include "net/base/hash_value.h" #include "net/cert/cert_type.h" #include "net/cert/nss_cert_database_chromeos.h"
diff --git a/components/browsing_data/core/BUILD.gn b/components/browsing_data/core/BUILD.gn index a0f40b11..dd140ce5 100644 --- a/components/browsing_data/core/BUILD.gn +++ b/components/browsing_data/core/BUILD.gn
@@ -10,6 +10,7 @@ sources = [ "browsing_data_utils.cc", "browsing_data_utils.h", + "clear_browsing_data_tab.h", "counters/autofill_counter.cc", "counters/autofill_counter.h", "counters/browsing_data_counter.cc", @@ -45,6 +46,11 @@ "browsing_data_utils.h", ] } + java_cpp_enum("clear_browsing_data_tab_java") { + sources = [ + "clear_browsing_data_tab.h", + ] + } } source_set("unit_tests") { @@ -63,6 +69,7 @@ "//components/signin/core/browser:test_support", "//components/sync", "//components/sync:test_support_driver", + "//components/sync_preferences:test_support", "//components/version_info:version_info", "//net", "//testing/gtest",
diff --git a/components/browsing_data/core/DEPS b/components/browsing_data/core/DEPS index cd4abb34..a28b230 100644 --- a/components/browsing_data/core/DEPS +++ b/components/browsing_data/core/DEPS
@@ -10,6 +10,7 @@ "+components/strings/grit/components_strings.h", "+components/sync/base", "+components/sync/driver", + "+components/sync_preferences", "+components/version_info", "+components/webdata/common", "+net",
diff --git a/components/browsing_data/core/browsing_data_utils.cc b/components/browsing_data/core/browsing_data_utils.cc index 8935742..d353f00 100644 --- a/components/browsing_data/core/browsing_data_utils.cc +++ b/components/browsing_data/core/browsing_data_utils.cc
@@ -9,6 +9,7 @@ #include "components/browsing_data/core/counters/history_counter.h" #include "components/browsing_data/core/counters/passwords_counter.h" #include "components/browsing_data/core/pref_names.h" +#include "components/prefs/pref_service.h" #include "components/strings/grit/components_strings.h" #include "ui/base/l10n/l10n_util.h" @@ -18,19 +19,19 @@ base::TimeDelta diff; base::Time delete_begin_time = base::Time::Now(); switch (time_period) { - case LAST_HOUR: + case TimePeriod::LAST_HOUR: diff = base::TimeDelta::FromHours(1); break; - case LAST_DAY: + case TimePeriod::LAST_DAY: diff = base::TimeDelta::FromHours(24); break; - case LAST_WEEK: + case TimePeriod::LAST_WEEK: diff = base::TimeDelta::FromHours(7 * 24); break; - case FOUR_WEEKS: + case TimePeriod::FOUR_WEEKS: diff = base::TimeDelta::FromHours(4 * 7 * 24); break; - case ALL_TIME: + case TimePeriod::ALL_TIME: delete_begin_time = base::Time(); break; } @@ -44,20 +45,20 @@ void RecordDeletionForPeriod(TimePeriod period) { switch (period) { - case browsing_data::LAST_HOUR: + case TimePeriod::LAST_HOUR: base::RecordAction(base::UserMetricsAction("ClearBrowsingData_LastHour")); break; - case browsing_data::LAST_DAY: + case TimePeriod::LAST_DAY: base::RecordAction(base::UserMetricsAction("ClearBrowsingData_LastDay")); break; - case browsing_data::LAST_WEEK: + case TimePeriod::LAST_WEEK: base::RecordAction(base::UserMetricsAction("ClearBrowsingData_LastWeek")); break; - case browsing_data::FOUR_WEEKS: + case TimePeriod::FOUR_WEEKS: base::RecordAction( base::UserMetricsAction("ClearBrowsingData_LastMonth")); break; - case browsing_data::ALL_TIME: + case TimePeriod::ALL_TIME: base::RecordAction( base::UserMetricsAction("ClearBrowsingData_Everything")); break; @@ -85,7 +86,8 @@ ? IDS_DEL_PASSWORDS_COUNTER : IDS_DEL_DOWNLOADS_COUNTER, count); - } else if (pref_name == browsing_data::prefs::kDeleteBrowsingHistory) { + } else if (pref_name == browsing_data::prefs::kDeleteBrowsingHistory || + pref_name == browsing_data::prefs::kDeleteBrowsingHistoryBasic) { // History counter. const browsing_data::HistoryCounter::HistoryResult* history_result = static_cast<const browsing_data::HistoryCounter::HistoryResult*>( @@ -169,30 +171,55 @@ return text; } +const char* GetTimePeriodPreferenceName( + ClearBrowsingDataTab clear_browsing_data_tab) { + return clear_browsing_data_tab == ClearBrowsingDataTab::BASIC + ? prefs::kDeleteTimePeriodBasic + : prefs::kDeleteTimePeriod; +} + bool GetDeletionPreferenceFromDataType( BrowsingDataType data_type, + ClearBrowsingDataTab clear_browsing_data_tab, std::string* out_pref) { + if (clear_browsing_data_tab == ClearBrowsingDataTab::BASIC) { + switch (data_type) { + case BrowsingDataType::HISTORY: + *out_pref = prefs::kDeleteBrowsingHistoryBasic; + return true; + case BrowsingDataType::CACHE: + *out_pref = prefs::kDeleteCacheBasic; + return true; + case BrowsingDataType::COOKIES: + *out_pref = prefs::kDeleteCookiesBasic; + return true; + default: + // This is not a valid type for the basic tab. + NOTREACHED(); + return false; + } + } switch (data_type) { - case HISTORY: + case BrowsingDataType::HISTORY: *out_pref = prefs::kDeleteBrowsingHistory; return true; - case CACHE: + case BrowsingDataType::CACHE: *out_pref = prefs::kDeleteCache; return true; - case COOKIES: + case BrowsingDataType::COOKIES: *out_pref = prefs::kDeleteCookies; return true; - case PASSWORDS: + case BrowsingDataType::PASSWORDS: *out_pref = prefs::kDeletePasswords; return true; - case FORM_DATA: + case BrowsingDataType::FORM_DATA: *out_pref = prefs::kDeleteFormData; return true; - case BOOKMARKS: + case BrowsingDataType::BOOKMARKS: // Bookmarks are deleted on the Android side. No corresponding deletion // preference. return false; - case NUM_TYPES: + case BrowsingDataType::NUM_TYPES: // This is not an actual type. NOTREACHED(); return false; @@ -201,4 +228,18 @@ return false; } +void MigratePreferencesToBasic(PrefService* prefs) { + if (!prefs->GetBoolean(prefs::kPreferencesMigratedToBasic)) { + prefs->SetBoolean(prefs::kDeleteBrowsingHistoryBasic, + prefs->GetBoolean(prefs::kDeleteBrowsingHistory)); + prefs->SetBoolean(prefs::kDeleteCacheBasic, + prefs->GetBoolean(prefs::kDeleteCache)); + prefs->SetBoolean(prefs::kDeleteCookiesBasic, + prefs->GetBoolean(prefs::kDeleteCookies)); + prefs->SetInteger(prefs::kDeleteTimePeriodBasic, + prefs->GetInteger(prefs::kDeleteTimePeriod)); + prefs->SetBoolean(prefs::kPreferencesMigratedToBasic, true); + } +} + } // namespace browsing_data
diff --git a/components/browsing_data/core/browsing_data_utils.h b/components/browsing_data/core/browsing_data_utils.h index db0d7c2..97cc7b1 100644 --- a/components/browsing_data/core/browsing_data_utils.h +++ b/components/browsing_data/core/browsing_data_utils.h
@@ -7,6 +7,7 @@ #include "base/strings/string16.h" #include "base/time/time.h" +#include "components/browsing_data/core/clear_browsing_data_tab.h" #include "components/browsing_data/core/counters/browsing_data_counter.h" namespace browsing_data { @@ -17,7 +18,7 @@ // // A Java counterpart will be generated for this enum. // GENERATED_JAVA_ENUM_PACKAGE: org.chromium.chrome.browser.browsing_data -enum BrowsingDataType { +enum class BrowsingDataType { HISTORY, CACHE, COOKIES, @@ -31,7 +32,7 @@ // // A Java counterpart will be generated for this enum. // GENERATED_JAVA_ENUM_PACKAGE: org.chromium.chrome.browser.browsing_data -enum TimePeriod { +enum class TimePeriod { LAST_HOUR = 0, LAST_DAY, LAST_WEEK, @@ -53,14 +54,24 @@ // Currently this can only be used for counters for which the Result is defined // in components/browsing_data/core/counters. base::string16 GetCounterTextFromResult( - const browsing_data::BrowsingDataCounter::Result* result); + const BrowsingDataCounter::Result* result); + +// Returns the preference that stores the time period. +const char* GetTimePeriodPreferenceName( + ClearBrowsingDataTab clear_browsing_data_tab); // Copies the name of the deletion preference corresponding to the given // |data_type| to |out_pref|. Returns false if no such preference exists. bool GetDeletionPreferenceFromDataType( BrowsingDataType data_type, + ClearBrowsingDataTab clear_browsing_data_tab, std::string* out_pref); +// Copies the deletion preferences for timeperiod, cache, history and cookies +// to a separate preferences that are used to on the basic CBD tab. +// This only happens the first time this method is called. +void MigratePreferencesToBasic(PrefService* prefs); + } // namespace browsing_data #endif // COMPONENTS_BROWSING_DATA_CORE_BROWSING_DATA_UTILS_H_
diff --git a/components/browsing_data/core/browsing_data_utils_unittest.cc b/components/browsing_data/core/browsing_data_utils_unittest.cc index eaad13b4b..bd22d28 100644 --- a/components/browsing_data/core/browsing_data_utils_unittest.cc +++ b/components/browsing_data/core/browsing_data_utils_unittest.cc
@@ -12,6 +12,9 @@ #include "base/threading/thread_task_runner_handle.h" #include "components/autofill/core/browser/webdata/autofill_webdata_service.h" #include "components/browsing_data/core/counters/autofill_counter.h" +#include "components/browsing_data/core/pref_names.h" +#include "components/prefs/pref_service.h" +#include "components/sync_preferences/testing_pref_service_syncable.h" #include "testing/gtest/include/gtest/gtest.h" namespace { @@ -33,8 +36,15 @@ BrowsingDataUtilsTest() {} ~BrowsingDataUtilsTest() override {} + void SetUp() override { + browsing_data::prefs::RegisterBrowserUserPrefs(prefs_.registry()); + } + + PrefService* prefs() { return &prefs_; } + private: base::MessageLoop loop_; + sync_preferences::TestingPrefServiceSyncable prefs_; }; // Tests the complex output of the Autofill counter. @@ -77,3 +87,32 @@ EXPECT_EQ(output, base::ASCIIToUTF16(test_case.expected_output)); } } + +TEST_F(BrowsingDataUtilsTest, MigratePreferencesToBasic) { + using namespace browsing_data::prefs; + + prefs()->SetBoolean(kDeleteBrowsingHistory, true); + prefs()->SetBoolean(kDeleteCookies, false); + prefs()->SetBoolean(kDeleteCache, false); + prefs()->SetInteger(kDeleteTimePeriod, 42); + + // History, cookies and cache should be migrated to their basic counterpart. + browsing_data::MigratePreferencesToBasic(prefs()); + EXPECT_TRUE(prefs()->GetBoolean(kDeleteBrowsingHistoryBasic)); + EXPECT_FALSE(prefs()->GetBoolean(kDeleteCookiesBasic)); + EXPECT_FALSE(prefs()->GetBoolean(kDeleteCacheBasic)); + EXPECT_EQ(42, prefs()->GetInteger(kDeleteTimePeriodBasic)); + + prefs()->SetBoolean(kDeleteBrowsingHistory, true); + prefs()->SetBoolean(kDeleteCookies, true); + prefs()->SetBoolean(kDeleteCache, true); + prefs()->SetInteger(kDeleteTimePeriod, 100); + + // After the first migration all settings should stay the same if the + // migration is executed again. + browsing_data::MigratePreferencesToBasic(prefs()); + EXPECT_TRUE(prefs()->GetBoolean(kDeleteBrowsingHistoryBasic)); + EXPECT_FALSE(prefs()->GetBoolean(kDeleteCookiesBasic)); + EXPECT_FALSE(prefs()->GetBoolean(kDeleteCacheBasic)); + EXPECT_EQ(42, prefs()->GetInteger(kDeleteTimePeriodBasic)); +}
diff --git a/components/browsing_data/core/clear_browsing_data_tab.h b/components/browsing_data/core/clear_browsing_data_tab.h new file mode 100644 index 0000000..c6c0b5bc --- /dev/null +++ b/components/browsing_data/core/clear_browsing_data_tab.h
@@ -0,0 +1,21 @@ +// Copyright 2017 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef COMPONENTS_BROWSING_DATA_CORE_CLEAR_BROWSING_DATA_TAB_H_ +#define COMPONENTS_BROWSING_DATA_CORE_CLEAR_BROWSING_DATA_TAB_H_ + +namespace browsing_data { + +// This enum is used to differentiate CBD preferences from the basic and +// advanced tab and manage their state separately. It is important that all +// preferences and the timeperiod selection have the same type. The default +// value for dialogs without separate tabs is advanced. +// +// A Java counterpart will be generated for this enum. +// GENERATED_JAVA_ENUM_PACKAGE: org.chromium.chrome.browser.browsing_data +enum class ClearBrowsingDataTab { BASIC, ADVANCED, NUM_TYPES }; + +} // namespace browsing_data + +#endif // COMPONENTS_BROWSING_DATA_CORE_CLEAR_BROWSING_DATA_TAB_H_
diff --git a/components/browsing_data/core/counters/browsing_data_counter.cc b/components/browsing_data/core/counters/browsing_data_counter.cc index af4fcc9..48a8018 100644 --- a/components/browsing_data/core/counters/browsing_data_counter.cc +++ b/components/browsing_data/core/counters/browsing_data_counter.cc
@@ -25,14 +25,15 @@ BrowsingDataCounter::~BrowsingDataCounter() {} void BrowsingDataCounter::Init(PrefService* pref_service, + ClearBrowsingDataTab clear_browsing_data_tab, const Callback& callback) { DCHECK(!initialized_); callback_ = callback; - pref_service_ = pref_service; - pref_.Init(GetPrefName(), pref_service_, + clear_browsing_data_tab_ = clear_browsing_data_tab; + pref_.Init(GetPrefName(), pref_service, base::Bind(&BrowsingDataCounter::Restart, base::Unretained(this))); period_.Init( - browsing_data::prefs::kDeleteTimePeriod, pref_service_, + GetTimePeriodPreferenceName(GetTab()), pref_service, base::Bind(&BrowsingDataCounter::Restart, base::Unretained(this))); initialized_ = true; @@ -104,8 +105,8 @@ return state_transitions_; } -PrefService* BrowsingDataCounter::GetPrefs() const { - return pref_service_; +ClearBrowsingDataTab BrowsingDataCounter::GetTab() const { + return clear_browsing_data_tab_; } void BrowsingDataCounter::TransitionToShowCalculating() {
diff --git a/components/browsing_data/core/counters/browsing_data_counter.h b/components/browsing_data/core/counters/browsing_data_counter.h index 529d24e8..d7fbb95 100644 --- a/components/browsing_data/core/counters/browsing_data_counter.h +++ b/components/browsing_data/core/counters/browsing_data_counter.h
@@ -13,6 +13,7 @@ #include "base/callback.h" #include "base/macros.h" #include "base/timer/timer.h" +#include "components/browsing_data/core/clear_browsing_data_tab.h" #include "components/prefs/pref_member.h" class PrefService; @@ -85,15 +86,13 @@ virtual ~BrowsingDataCounter(); // Should be called once to initialize this class. - void Init(PrefService* pref_service, const Callback& callback); + void Init(PrefService* pref_service, + ClearBrowsingDataTab clear_browsing_data_tab, + const Callback& callback); // Name of the preference associated with this counter. virtual const char* GetPrefName() const = 0; - // PrefService that manages the preferences for the user profile - // associated with this counter. - PrefService* GetPrefs() const; - // Restarts the counter. Will be called automatically if the counting needs // to be restarted, e.g. when the deletion preference changes state or when // we are notified of data changes. @@ -121,6 +120,10 @@ // Calculates the beginning of the counting period as |period_| before now. base::Time GetPeriodStart(); + // Returns if this counter belongs to a preference on the default, basic or + // advanced CBD tab. + ClearBrowsingDataTab GetTab() const; + private: // Called after the class is initialized by calling |Init|. virtual void OnInitialized(); @@ -132,9 +135,8 @@ void TransitionToShowCalculating(); void TransitionToReadyToReportResult(); - // Pointer to the PrefService that manages the preferences for the user - // profile associated with this counter. - PrefService* pref_service_; + // Indicates if this counter belongs to a preference on the basic CBD tab. + ClearBrowsingDataTab clear_browsing_data_tab_; // The callback that will be called when the UI should be updated with a new // counter value.
diff --git a/components/browsing_data/core/counters/browsing_data_counter_unittest.cc b/components/browsing_data/core/counters/browsing_data_counter_unittest.cc index e7455b3..370a5a8 100644 --- a/components/browsing_data/core/counters/browsing_data_counter_unittest.cc +++ b/components/browsing_data/core/counters/browsing_data_counter_unittest.cc
@@ -87,7 +87,9 @@ pref_service_->registry()->RegisterIntegerPref(prefs::kDeleteTimePeriod, 0); counter_.reset(new MockBrowsingDataCounter()); - counter_->Init(pref_service_.get(), base::Bind(&IgnoreResult)); + counter_->Init(pref_service_.get(), + browsing_data::ClearBrowsingDataTab::ADVANCED, + base::Bind(&IgnoreResult)); } void TearDown() override {
diff --git a/components/browsing_data/core/counters/history_counter.cc b/components/browsing_data/core/counters/history_counter.cc index daf8010..6fcb1c17e 100644 --- a/components/browsing_data/core/counters/history_counter.cc +++ b/components/browsing_data/core/counters/history_counter.cc
@@ -46,7 +46,9 @@ } const char* HistoryCounter::GetPrefName() const { - return browsing_data::prefs::kDeleteBrowsingHistory; + return GetTab() == ClearBrowsingDataTab::BASIC + ? browsing_data::prefs::kDeleteBrowsingHistoryBasic + : browsing_data::prefs::kDeleteBrowsingHistory; } void HistoryCounter::Count() {
diff --git a/components/browsing_data/core/pref_names.cc b/components/browsing_data/core/pref_names.cc index 87a39cb..59113a8 100644 --- a/components/browsing_data/core/pref_names.cc +++ b/components/browsing_data/core/pref_names.cc
@@ -12,12 +12,17 @@ // Clear browsing data deletion time period. const char kDeleteTimePeriod[] = "browser.clear_data.time_period"; +const char kDeleteTimePeriodBasic[] = "browser.clear_data.time_period_basic"; // Clear Browsing Data dialog datatype preferences. const char kDeleteBrowsingHistory[] = "browser.clear_data.browsing_history"; +const char kDeleteBrowsingHistoryBasic[] = + "browser.clear_data.browsing_history_basic"; const char kDeleteDownloadHistory[] = "browser.clear_data.download_history"; const char kDeleteCache[] = "browser.clear_data.cache"; +const char kDeleteCacheBasic[] = "browser.clear_data.cache_basic"; const char kDeleteCookies[] = "browser.clear_data.cookies"; +const char kDeleteCookiesBasic[] = "browser.clear_data.cookies_basic"; const char kDeletePasswords[] = "browser.clear_data.passwords"; const char kDeleteFormData[] = "browser.clear_data.form_data"; const char kDeleteHostedAppsData[] = "browser.clear_data.hosted_apps_data"; @@ -29,26 +34,35 @@ const char kClearBrowsingDataHistoryNoticeShownTimes[] = "browser.clear_data.history_notice_shown_times"; const char kLastClearBrowsingDataTab[] = "browser.last_clear_browsing_data_tab"; +const char kPreferencesMigratedToBasic[] = + "browser.clear_data.preferences_migrated_to_basic"; void RegisterBrowserUserPrefs(user_prefs::PrefRegistrySyncable* registry) { registry->RegisterIntegerPref( kDeleteTimePeriod, 0, user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); + registry->RegisterIntegerPref( + kDeleteTimePeriodBasic, 0, + user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); registry->RegisterBooleanPref( kDeleteBrowsingHistory, true, user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); registry->RegisterBooleanPref( - kDeleteCache, true, + kDeleteBrowsingHistoryBasic, true, user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); registry->RegisterBooleanPref( - kDeleteCookies, true, + kDeleteCache, true, user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); + registry->RegisterBooleanPref( + kDeleteCacheBasic, true, user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); + registry->RegisterBooleanPref( + kDeleteCookies, true, user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); + registry->RegisterBooleanPref( + kDeleteCookiesBasic, true, user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); registry->RegisterBooleanPref( - kDeletePasswords, false, - user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); + kDeletePasswords, false, user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); registry->RegisterBooleanPref( - kDeleteFormData, false, - user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); + kDeleteFormData, false, user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); registry->RegisterIntegerPref( kClearBrowsingDataHistoryNoticeShownTimes, 0); @@ -70,6 +84,10 @@ kLastClearBrowsingDataTab, 0, user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); #endif + + registry->RegisterBooleanPref( + kPreferencesMigratedToBasic, false, + user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); } } // namespace prefs
diff --git a/components/browsing_data/core/pref_names.h b/components/browsing_data/core/pref_names.h index 560948e..a8af566 100644 --- a/components/browsing_data/core/pref_names.h +++ b/components/browsing_data/core/pref_names.h
@@ -14,11 +14,15 @@ namespace prefs { extern const char kDeleteTimePeriod[]; +extern const char kDeleteTimePeriodBasic[]; extern const char kDeleteBrowsingHistory[]; +extern const char kDeleteBrowsingHistoryBasic[]; extern const char kDeleteDownloadHistory[]; extern const char kDeleteCache[]; +extern const char kDeleteCacheBasic[]; extern const char kDeleteCookies[]; +extern const char kDeleteCookiesBasic[]; extern const char kDeletePasswords[]; extern const char kDeleteFormData[]; extern const char kDeleteHostedAppsData[]; @@ -28,6 +32,7 @@ extern const char kClearBrowsingDataHistoryNoticeShownTimes[]; extern const char kLastClearBrowsingDataTab[]; +extern const char kPreferencesMigratedToBasic[]; // Registers the Clear Browsing Data UI prefs. void RegisterBrowserUserPrefs(user_prefs::PrefRegistrySyncable* registry);
diff --git a/components/doodle/doodle_fetcher.h b/components/doodle/doodle_fetcher.h index f5ef780..e7a5d26 100644 --- a/components/doodle/doodle_fetcher.h +++ b/components/doodle/doodle_fetcher.h
@@ -9,6 +9,10 @@ #include "base/optional.h" #include "components/doodle/doodle_types.h" +namespace base { +class TimeDelta; +} + namespace doodle { // Interface for fetching the current doodle from the network. @@ -19,9 +23,11 @@ class DoodleFetcher { public: // Callback that is invoked when the fetching is done. - // |doodle_config| will only contain a value if |state| is AVAILABLE. + // |time_to_live| will only be meaningful, and |doodle_config| will only + // contain a value, if |state| is AVAILABLE. using FinishedCallback = base::OnceCallback<void( DoodleState state, + base::TimeDelta time_to_live, const base::Optional<DoodleConfig>& doodle_config)>; virtual ~DoodleFetcher() = default;
diff --git a/components/doodle/doodle_fetcher_impl.cc b/components/doodle/doodle_fetcher_impl.cc index f7954a4..2d37cf5a 100644 --- a/components/doodle/doodle_fetcher_impl.cc +++ b/components/doodle/doodle_fetcher_impl.cc
@@ -112,7 +112,8 @@ if (!(source->GetStatus().is_success() && source->GetResponseCode() == net::HTTP_OK && source->GetResponseAsString(&json_string))) { - RespondToAllCallbacks(DoodleState::DOWNLOAD_ERROR, base::nullopt); + RespondToAllCallbacks(DoodleState::DOWNLOAD_ERROR, base::TimeDelta(), + base::nullopt); return; } @@ -128,43 +129,51 @@ base::DictionaryValue::From(std::move(json)); if (!config.get()) { DLOG(WARNING) << "Doodle JSON is not valid."; - RespondToAllCallbacks(DoodleState::PARSING_ERROR, base::nullopt); + RespondToAllCallbacks(DoodleState::PARSING_ERROR, base::TimeDelta(), + base::nullopt); return; } const base::DictionaryValue* ddljson = nullptr; if (!config->GetDictionary("ddljson", &ddljson)) { DLOG(WARNING) << "Doodle JSON response did not contain 'ddljson' key."; - RespondToAllCallbacks(DoodleState::PARSING_ERROR, base::nullopt); + RespondToAllCallbacks(DoodleState::PARSING_ERROR, base::TimeDelta(), + base::nullopt); return; } - base::Optional<DoodleConfig> doodle = ParseDoodle(*ddljson); + base::TimeDelta time_to_live; + base::Optional<DoodleConfig> doodle = + ParseDoodleConfigAndTimeToLive(*ddljson, &time_to_live); if (!doodle.has_value()) { - RespondToAllCallbacks(DoodleState::NO_DOODLE, base::nullopt); + RespondToAllCallbacks(DoodleState::NO_DOODLE, base::TimeDelta(), + base::nullopt); return; } - RespondToAllCallbacks(DoodleState::AVAILABLE, std::move(doodle)); + RespondToAllCallbacks(DoodleState::AVAILABLE, time_to_live, + std::move(doodle)); } void DoodleFetcherImpl::OnJsonParseFailed(const std::string& error_message) { DLOG(WARNING) << "JSON parsing failed: " << error_message; - RespondToAllCallbacks(DoodleState::PARSING_ERROR, base::nullopt); + RespondToAllCallbacks(DoodleState::PARSING_ERROR, base::TimeDelta(), + base::nullopt); } -base::Optional<DoodleConfig> DoodleFetcherImpl::ParseDoodle( - const base::DictionaryValue& ddljson) const { +base::Optional<DoodleConfig> DoodleFetcherImpl::ParseDoodleConfigAndTimeToLive( + const base::DictionaryValue& ddljson, + base::TimeDelta* time_to_live) const { DoodleConfig doodle; // The |large_image| field is required (it's the "default" representation for // the doodle). if (!ParseImage(ddljson, "large_image", &doodle.large_image)) { return base::nullopt; } + ParseBaseInformation(ddljson, &doodle, time_to_live); ParseImage(ddljson, "transparent_large_image", &doodle.transparent_large_image); ParseImage(ddljson, "large_cta_image", &doodle.large_cta_image); - ParseBaseInformation(ddljson, &doodle); return doodle; } @@ -190,7 +199,8 @@ void DoodleFetcherImpl::ParseBaseInformation( const base::DictionaryValue& ddljson, - DoodleConfig* config) const { + DoodleConfig* config, + base::TimeDelta* time_to_live) const { config->search_url = ParseRelativeUrl(ddljson, "search_url"); config->target_url = ParseRelativeUrl(ddljson, "target_url"); config->fullpage_interactive_url = @@ -211,7 +221,7 @@ ttl = kMaxTimeToLiveMS; DLOG(WARNING) << "Clamping Doodle TTL to 30 days!"; } - config->time_to_live = base::TimeDelta::FromMillisecondsD(ttl); + *time_to_live = base::TimeDelta::FromMillisecondsD(ttl); } GURL DoodleFetcherImpl::ParseRelativeUrl( @@ -227,9 +237,10 @@ void DoodleFetcherImpl::RespondToAllCallbacks( DoodleState state, + base::TimeDelta time_to_live, const base::Optional<DoodleConfig>& config) { for (auto& callback : callbacks_) { - std::move(callback).Run(state, config); + std::move(callback).Run(state, time_to_live, config); } callbacks_.clear(); }
diff --git a/components/doodle/doodle_fetcher_impl.h b/components/doodle/doodle_fetcher_impl.h index 3f3eb19a..ad38992 100644 --- a/components/doodle/doodle_fetcher_impl.h +++ b/components/doodle/doodle_fetcher_impl.h
@@ -25,6 +25,7 @@ namespace base { class DictionaryValue; +class TimeDelta; class Value; } @@ -62,18 +63,23 @@ // ParseJSONCallback Failure callback void OnJsonParseFailed(const std::string& error_message); - base::Optional<DoodleConfig> ParseDoodle( - const base::DictionaryValue& ddljson) const; + base::Optional<DoodleConfig> ParseDoodleConfigAndTimeToLive( + const base::DictionaryValue& ddljson, + base::TimeDelta* time_to_live) const; + bool ParseImage(const base::DictionaryValue& image_dict, const std::string& image_name, DoodleImage* image) const; void ParseBaseInformation(const base::DictionaryValue& ddljson, - DoodleConfig* config) const; + DoodleConfig* config, + base::TimeDelta* time_to_live) const; GURL ParseRelativeUrl(const base::DictionaryValue& dict_value, const std::string& key) const; void RespondToAllCallbacks(DoodleState state, + base::TimeDelta time_to_live, const base::Optional<DoodleConfig>& config); + GURL GetGoogleBaseUrl() const; // Returns whether a fetch is still in progress. A fetch begins when a
diff --git a/components/doodle/doodle_fetcher_impl_unittest.cc b/components/doodle/doodle_fetcher_impl_unittest.cc index 785936d..939b7b8 100644 --- a/components/doodle/doodle_fetcher_impl_unittest.cc +++ b/components/doodle/doodle_fetcher_impl_unittest.cc
@@ -12,6 +12,7 @@ #include "base/json/json_reader.h" #include "base/memory/ptr_util.h" #include "base/message_loop/message_loop.h" +#include "base/time/time.h" #include "base/values.h" #include "components/google/core/browser/google_switches.h" #include "components/google/core/browser/google_url_tracker.h" @@ -106,20 +107,27 @@ return url_fetcher; } + // TODO(treib): Replace with a MockCallback plus testing::SaveArgs? DoodleFetcherImpl::FinishedCallback CreateResponseSavingCallback( DoodleState* state_out, + base::TimeDelta* time_to_live_out, base::Optional<DoodleConfig>* config_out) { return base::BindOnce( - [](DoodleState* state_out, base::Optional<DoodleConfig>* config_out, - DoodleState state, const base::Optional<DoodleConfig>& config) { + [](DoodleState* state_out, base::TimeDelta* time_to_live_out, + base::Optional<DoodleConfig>* config_out, DoodleState state, + base::TimeDelta time_to_live, + const base::Optional<DoodleConfig>& config) { if (state_out) { *state_out = state; } + if (time_to_live_out) { + *time_to_live_out = time_to_live; + } if (config_out) { *config_out = config; } }, - state_out, config_out); + state_out, time_to_live_out, config_out); } DoodleFetcherImpl* doodle_fetcher() { return &doodle_fetcher_; } @@ -139,7 +147,7 @@ base::Optional<DoodleConfig> response; doodle_fetcher()->FetchDoodle( - CreateResponseSavingCallback(&state, &response)); + CreateResponseSavingCallback(&state, nullptr, &response)); RespondWithData(R"json({"ddljson": { "time_to_live_ms":55000, "large_image": {"url":"/logos/doodles/2015/some.gif"} @@ -154,7 +162,7 @@ base::Optional<DoodleConfig> response; doodle_fetcher()->FetchDoodle( - CreateResponseSavingCallback(&state, &response)); + CreateResponseSavingCallback(&state, nullptr, &response)); RespondWithError(net::ERR_FILE_NOT_FOUND); EXPECT_THAT(state, Eq(DoodleState::DOWNLOAD_ERROR)); @@ -166,7 +174,7 @@ base::Optional<DoodleConfig> response; doodle_fetcher()->FetchDoodle( - CreateResponseSavingCallback(&state, &response)); + CreateResponseSavingCallback(&state, nullptr, &response)); RespondWithData("}"); EXPECT_THAT(state, Eq(DoodleState::PARSING_ERROR)); @@ -178,7 +186,7 @@ base::Optional<DoodleConfig> response; doodle_fetcher()->FetchDoodle( - CreateResponseSavingCallback(&state, &response)); + CreateResponseSavingCallback(&state, nullptr, &response)); RespondWithData("{}"); EXPECT_THAT(state, Eq(DoodleState::PARSING_ERROR)); @@ -187,10 +195,11 @@ TEST_F(DoodleFetcherImplTest, ResponseContainsValidBaseInformation) { DoodleState state(DoodleState::NO_DOODLE); + base::TimeDelta time_to_live; base::Optional<DoodleConfig> response; doodle_fetcher()->FetchDoodle( - CreateResponseSavingCallback(&state, &response)); + CreateResponseSavingCallback(&state, &time_to_live, &response)); RespondWithData(R"json()]}'{ "ddljson": { "alt_text":"Mouseover Text", @@ -220,59 +229,59 @@ EXPECT_THAT(config.interactive_html, Eq("\u003cstyle\u003e\u003c/style\u003e")); - EXPECT_THAT(config.time_to_live, - Eq(base::TimeDelta::FromMilliseconds(55000))); + EXPECT_THAT(time_to_live, Eq(base::TimeDelta::FromMilliseconds(55000))); } TEST_F(DoodleFetcherImplTest, DoodleExpiresWithinThirtyDaysForTooLargeTTL) { DoodleState state(DoodleState::NO_DOODLE); + base::TimeDelta time_to_live; base::Optional<DoodleConfig> response; doodle_fetcher()->FetchDoodle( - CreateResponseSavingCallback(&state, &response)); + CreateResponseSavingCallback(&state, &time_to_live, &response)); RespondWithData(R"json({"ddljson": { "time_to_live_ms":5184000000, "large_image": {"url":"/logos/doodles/2015/some.gif"} }})json"); // 60 days EXPECT_THAT(state, Eq(DoodleState::AVAILABLE)); - ASSERT_TRUE(response.has_value()); - EXPECT_THAT(response.value().time_to_live, + EXPECT_TRUE(response.has_value()); + EXPECT_THAT(time_to_live, Eq(base::TimeDelta::FromMilliseconds(30ul * 24 * 60 * 60 * 1000))); // 30 days } TEST_F(DoodleFetcherImplTest, DoodleExpiresImmediatelyWithNegativeTTL) { DoodleState state(DoodleState::NO_DOODLE); + base::TimeDelta time_to_live; base::Optional<DoodleConfig> response; doodle_fetcher()->FetchDoodle( - CreateResponseSavingCallback(&state, &response)); + CreateResponseSavingCallback(&state, &time_to_live, &response)); RespondWithData(R"json({"ddljson": { "time_to_live_ms":-1, "large_image": {"url":"/logos/doodles/2015/some.gif"} }})json"); EXPECT_THAT(state, Eq(DoodleState::AVAILABLE)); - ASSERT_TRUE(response.has_value()); - EXPECT_THAT(response.value().time_to_live, - Eq(base::TimeDelta::FromMilliseconds(0))); + EXPECT_TRUE(response.has_value()); + EXPECT_THAT(time_to_live, Eq(base::TimeDelta::FromMilliseconds(0))); } TEST_F(DoodleFetcherImplTest, DoodleExpiresImmediatelyWithoutValidTTL) { DoodleState state(DoodleState::NO_DOODLE); + base::TimeDelta time_to_live; base::Optional<DoodleConfig> response; doodle_fetcher()->FetchDoodle( - CreateResponseSavingCallback(&state, &response)); + CreateResponseSavingCallback(&state, &time_to_live, &response)); RespondWithData(R"json({"ddljson": { "large_image": {"url":"/logos/doodles/2015/some.gif"} }})json"); EXPECT_THAT(state, Eq(DoodleState::AVAILABLE)); - ASSERT_TRUE(response.has_value()); - EXPECT_THAT(response.value().time_to_live, - Eq(base::TimeDelta::FromMilliseconds(0))); + EXPECT_TRUE(response.has_value()); + EXPECT_THAT(time_to_live, Eq(base::TimeDelta::FromMilliseconds(0))); } TEST_F(DoodleFetcherImplTest, ReturnsNoDoodleForMissingLargeImageUrl) { @@ -280,7 +289,7 @@ base::Optional<DoodleConfig> response; doodle_fetcher()->FetchDoodle( - CreateResponseSavingCallback(&state, &response)); + CreateResponseSavingCallback(&state, nullptr, &response)); RespondWithData(R"json({"ddljson": { "time_to_live_ms":55000, "large_image": {} @@ -295,7 +304,7 @@ base::Optional<DoodleConfig> response; doodle_fetcher()->FetchDoodle( - CreateResponseSavingCallback(&state, &response)); + CreateResponseSavingCallback(&state, nullptr, &response)); RespondWithData("{\"ddljson\":{}}"); EXPECT_THAT(state, Eq(DoodleState::NO_DOODLE)); @@ -307,7 +316,7 @@ base::Optional<DoodleConfig> response; doodle_fetcher()->FetchDoodle( - CreateResponseSavingCallback(&state, &response)); + CreateResponseSavingCallback(&state, nullptr, &response)); RespondWithData(R"json()]}'{ "ddljson": { "time_to_live_ms":55000, @@ -374,10 +383,10 @@ // Trigger two requests. doodle_fetcher()->FetchDoodle( - CreateResponseSavingCallback(&state1, &response1)); + CreateResponseSavingCallback(&state1, nullptr, &response1)); net::URLFetcher* first_created_fetcher = GetRunningFetcher(); doodle_fetcher()->FetchDoodle( - CreateResponseSavingCallback(&state2, &response2)); + CreateResponseSavingCallback(&state2, nullptr, &response2)); net::URLFetcher* second_created_fetcher = GetRunningFetcher(); // Expect that only one fetcher handles both requests. @@ -396,8 +405,8 @@ } TEST_F(DoodleFetcherImplTest, ReceivesBaseUrlFromTracker) { - doodle_fetcher()->FetchDoodle( - CreateResponseSavingCallback(/*state=*/nullptr, /*response=*/nullptr)); + doodle_fetcher()->FetchDoodle(CreateResponseSavingCallback( + /*state=*/nullptr, nullptr, /*response=*/nullptr)); EXPECT_THAT(GetRunningFetcher()->GetOriginalURL(), Eq(GetGoogleBaseURL().Resolve(kDoodleConfigPath))); @@ -407,8 +416,8 @@ base::CommandLine::ForCurrentProcess()->AppendSwitchASCII( switches::kGoogleBaseURL, "http://www.google.kz"); - doodle_fetcher()->FetchDoodle( - CreateResponseSavingCallback(/*state=*/nullptr, /*response=*/nullptr)); + doodle_fetcher()->FetchDoodle(CreateResponseSavingCallback( + /*state=*/nullptr, nullptr, /*response=*/nullptr)); EXPECT_THAT(GetRunningFetcher()->GetOriginalURL(), Eq(GURL("http://www.google.kz").Resolve(kDoodleConfigPath)));
diff --git a/components/doodle/doodle_service.cc b/components/doodle/doodle_service.cc index fee586c..c5cb9137 100644 --- a/components/doodle/doodle_service.cc +++ b/components/doodle/doodle_service.cc
@@ -7,6 +7,7 @@ #include <utility> #include "base/bind.h" +#include "base/time/time.h" namespace doodle { @@ -32,30 +33,19 @@ void DoodleService::DoodleFetched( DoodleState state, + base::TimeDelta time_to_live, const base::Optional<DoodleConfig>& doodle_config) { - if (!cached_config_.has_value() && !doodle_config.has_value()) { - // There was no config before and we didn't get a new one, so there's - // nothing to do. + // If nothing changed, then there's nothing to do. Note that this checks both + // for existence changes as well as changes of the configs themselves. + if (cached_config_ == doodle_config) { + // TODO(treib): Once we support expiry, update the time to live here. return; } - bool notify = false; - if (cached_config_.has_value() != doodle_config.has_value()) { - // We got a new config, or an existing one went away. - notify = true; - } else { - // There was a config both before and after the update. Notify observers - // only if something relevant changed. - notify = !cached_config_.value().IsEquivalent(doodle_config.value()); - } - - // In any case, update the cache. + // Update the cache and notify observers. cached_config_ = doodle_config; - - if (notify) { - for (auto& observer : observers_) { - observer.OnDoodleConfigUpdated(cached_config_); - } + for (auto& observer : observers_) { + observer.OnDoodleConfigUpdated(cached_config_); } }
diff --git a/components/doodle/doodle_service.h b/components/doodle/doodle_service.h index 09e1ae1f..f1265e7 100644 --- a/components/doodle/doodle_service.h +++ b/components/doodle/doodle_service.h
@@ -13,6 +13,10 @@ #include "components/doodle/doodle_fetcher.h" #include "components/doodle/doodle_types.h" +namespace base { +class TimeDelta; +} + namespace doodle { class DoodleService { @@ -43,6 +47,7 @@ private: void DoodleFetched(DoodleState state, + base::TimeDelta time_to_live, const base::Optional<DoodleConfig>& doodle_config); // The fetcher for getting fresh DoodleConfigs from the network.
diff --git a/components/doodle/doodle_service_unittest.cc b/components/doodle/doodle_service_unittest.cc index 48b3a10..41ebe7d5a 100644 --- a/components/doodle/doodle_service_unittest.cc +++ b/components/doodle/doodle_service_unittest.cc
@@ -10,6 +10,7 @@ #include "base/bind.h" #include "base/memory/ptr_util.h" +#include "base/time/time.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" @@ -32,9 +33,10 @@ size_t num_pending_callbacks() const { return callbacks_.size(); } void ServeAllCallbacks(DoodleState state, + base::TimeDelta time_to_live, const base::Optional<DoodleConfig>& config) { for (auto& callback : callbacks_) { - std::move(callback).Run(state, config); + std::move(callback).Run(state, time_to_live, config); } callbacks_.clear(); } @@ -51,12 +53,6 @@ } // namespace -// Equality operator for DoodleConfigs, for use by testing::Eq. -// Note: This must be outside of the anonymous namespace. -bool operator==(const DoodleConfig& lhs, const DoodleConfig& rhs) { - return lhs.IsEquivalent(rhs); -} - class DoodleServiceTest : public testing::Test { public: DoodleServiceTest() : fetcher_(nullptr) { @@ -84,7 +80,8 @@ // Serve it (with an arbitrary config). DoodleConfig config; config.doodle_type = DoodleType::SIMPLE; - fetcher()->ServeAllCallbacks(DoodleState::AVAILABLE, config); + fetcher()->ServeAllCallbacks(DoodleState::AVAILABLE, + base::TimeDelta::FromHours(1), config); // The config should be available. EXPECT_THAT(service()->config(), Eq(config)); @@ -97,8 +94,9 @@ // Serve it with a different config. DoodleConfig other_config; other_config.doodle_type = DoodleType::SLIDESHOW; - DCHECK(!config.IsEquivalent(other_config)); - fetcher()->ServeAllCallbacks(DoodleState::AVAILABLE, other_config); + DCHECK(config != other_config); + fetcher()->ServeAllCallbacks(DoodleState::AVAILABLE, + base::TimeDelta::FromHours(1), other_config); // The config should have been updated. EXPECT_THAT(service()->config(), Eq(other_config)); @@ -119,7 +117,8 @@ DoodleConfig config; config.doodle_type = DoodleType::SIMPLE; EXPECT_CALL(observer, OnDoodleConfigUpdated(Eq(config))); - fetcher()->ServeAllCallbacks(DoodleState::AVAILABLE, config); + fetcher()->ServeAllCallbacks(DoodleState::AVAILABLE, + base::TimeDelta::FromHours(1), config); // Remove the observer before the service gets destroyed. service()->RemoveObserver(&observer); @@ -130,7 +129,8 @@ service()->Refresh(); DoodleConfig config; config.doodle_type = DoodleType::SIMPLE; - fetcher()->ServeAllCallbacks(DoodleState::AVAILABLE, config); + fetcher()->ServeAllCallbacks(DoodleState::AVAILABLE, + base::TimeDelta::FromHours(1), config); ASSERT_THAT(service()->config(), Eq(config)); // Register an observer and request a refresh. @@ -142,7 +142,8 @@ // Serve the request with an empty doodle config. The observer should get // notified. EXPECT_CALL(observer, OnDoodleConfigUpdated(Eq(base::nullopt))); - fetcher()->ServeAllCallbacks(DoodleState::NO_DOODLE, base::nullopt); + fetcher()->ServeAllCallbacks(DoodleState::NO_DOODLE, base::TimeDelta(), + base::nullopt); // Remove the observer before the service gets destroyed. service()->RemoveObserver(&observer); @@ -153,7 +154,8 @@ service()->Refresh(); DoodleConfig config; config.doodle_type = DoodleType::SIMPLE; - fetcher()->ServeAllCallbacks(DoodleState::AVAILABLE, config); + fetcher()->ServeAllCallbacks(DoodleState::AVAILABLE, + base::TimeDelta::FromHours(1), config); ASSERT_THAT(service()->config(), Eq(config)); // Register an observer and request a refresh. @@ -166,9 +168,10 @@ // notified. DoodleConfig other_config; other_config.doodle_type = DoodleType::SLIDESHOW; - DCHECK(!config.IsEquivalent(other_config)); + DCHECK(config != other_config); EXPECT_CALL(observer, OnDoodleConfigUpdated(Eq(other_config))); - fetcher()->ServeAllCallbacks(DoodleState::AVAILABLE, other_config); + fetcher()->ServeAllCallbacks(DoodleState::AVAILABLE, + base::TimeDelta::FromHours(1), other_config); // Remove the observer before the service gets destroyed. service()->RemoveObserver(&observer); @@ -179,7 +182,8 @@ service()->Refresh(); DoodleConfig config; config.doodle_type = DoodleType::SIMPLE; - fetcher()->ServeAllCallbacks(DoodleState::AVAILABLE, config); + fetcher()->ServeAllCallbacks(DoodleState::AVAILABLE, + base::TimeDelta::FromHours(1), config); ASSERT_THAT(service()->config(), Eq(config)); // Register an observer and request a refresh. @@ -192,8 +196,9 @@ // *not* get notified. DoodleConfig equivalent_config; equivalent_config.doodle_type = DoodleType::SIMPLE; - DCHECK(config.IsEquivalent(equivalent_config)); - fetcher()->ServeAllCallbacks(DoodleState::AVAILABLE, equivalent_config); + DCHECK(config == equivalent_config); + fetcher()->ServeAllCallbacks( + DoodleState::AVAILABLE, base::TimeDelta::FromHours(1), equivalent_config); // Remove the observer before the service gets destroyed. service()->RemoveObserver(&observer);
diff --git a/components/doodle/doodle_types.cc b/components/doodle/doodle_types.cc index 7468d2b8..d88221fc 100644 --- a/components/doodle/doodle_types.cc +++ b/components/doodle/doodle_types.cc
@@ -15,10 +15,7 @@ return !(*this == other); } -bool DoodleConfig::IsEquivalent(const DoodleConfig& other) const { - // Note: This compares all fields except for |time_to_live|, which by - // definition isn't constant over time, and shouldn't be in DoodleConfig in - // the first place. +bool DoodleConfig::operator==(const DoodleConfig& other) const { return doodle_type == other.doodle_type && alt_text == other.alt_text && interactive_html == other.interactive_html && search_url == other.search_url && target_url == other.target_url && @@ -28,4 +25,8 @@ transparent_large_image == other.transparent_large_image; } +bool DoodleConfig::operator!=(const DoodleConfig& other) const { + return !(*this == other); +} + } // namespace doodle
diff --git a/components/doodle/doodle_types.h b/components/doodle/doodle_types.h index 1317c80..d97b50b 100644 --- a/components/doodle/doodle_types.h +++ b/components/doodle/doodle_types.h
@@ -5,7 +5,6 @@ #ifndef COMPONENTS_DOODLE_DOODLE_TYPES_H_ #define COMPONENTS_DOODLE_DOODLE_TYPES_H_ -#include "base/time/time.h" #include "url/gurl.h" namespace doodle { @@ -52,9 +51,8 @@ DoodleConfig(const DoodleConfig& config); // = default; ~DoodleConfig(); - // Checks whether this config is "equivalent" to the other. This compares all - // fields for equality, except for |expiry_date|. - bool IsEquivalent(const DoodleConfig& other) const; + bool operator==(const DoodleConfig& other) const; + bool operator!=(const DoodleConfig& other) const; DoodleType doodle_type; std::string alt_text; @@ -68,9 +66,6 @@ DoodleImage large_cta_image; DoodleImage transparent_large_image; - // TODO(treib,fhorschig): Don't expose this? Clients don't care about it. - base::TimeDelta time_to_live; - // Copying and assignment allowed. };
diff --git a/components/network_session_configurator/network_session_configurator.cc b/components/network_session_configurator/network_session_configurator.cc index fba5a01..91a2b15 100644 --- a/components/network_session_configurator/network_session_configurator.cc +++ b/components/network_session_configurator/network_session_configurator.cc
@@ -324,13 +324,6 @@ GetVariationParam(quic_trial_params, "quic_version")); } -bool ShouldEnableServerPushCancelation( - const VariationParameters& quic_trial_params) { - return base::LowerCaseEqualsASCII( - GetVariationParam(quic_trial_params, "enable_server_push_cancellation"), - "true"); -} - void ConfigureQuicParams(base::StringPiece quic_trial_group, const VariationParameters& quic_trial_params, bool is_quic_force_disabled, @@ -342,8 +335,6 @@ is_quic_force_enabled); params->disable_quic_on_timeout_with_open_streams = ShouldDisableQuicWhenConnectionTimesOutWithOpenStreams(quic_trial_params); - params->enable_server_push_cancellation = - ShouldEnableServerPushCancelation(quic_trial_params); params->enable_quic_alternative_service_with_different_host = ShouldQuicEnableAlternativeServicesForDifferentHost(quic_trial_params);
diff --git a/components/network_session_configurator/network_session_configurator_unittest.cc b/components/network_session_configurator/network_session_configurator_unittest.cc index 4d24564..1832dfd 100644 --- a/components/network_session_configurator/network_session_configurator_unittest.cc +++ b/components/network_session_configurator/network_session_configurator_unittest.cc
@@ -74,7 +74,6 @@ EXPECT_FALSE(params_.quic_disable_connection_pooling); EXPECT_EQ(0.25f, params_.quic_load_server_info_timeout_srtt_multiplier); EXPECT_FALSE(params_.quic_enable_connection_racing); - EXPECT_FALSE(params_.enable_server_push_cancellation); EXPECT_FALSE(params_.quic_enable_non_blocking_io); EXPECT_FALSE(params_.quic_disable_disk_cache); EXPECT_FALSE(params_.quic_prefer_aes); @@ -211,17 +210,6 @@ EXPECT_TRUE(params_.quic_race_cert_verification); } -TEST_F(NetworkSessionConfiguratorTest, EnableServerPushCancellation) { - std::map<std::string, std::string> field_trial_params; - field_trial_params["enable_server_push_cancellation"] = "true"; - variations::AssociateVariationParams("QUIC", "Enabled", field_trial_params); - base::FieldTrialList::CreateFieldTrial("QUIC", "Enabled"); - - ParseFieldTrials(); - - EXPECT_TRUE(params_.enable_server_push_cancellation); -} - TEST_F(NetworkSessionConfiguratorTest, QuicDoNotFragment) { std::map<std::string, std::string> field_trial_params; field_trial_params["do_not_fragment"] = "true";
diff --git a/components/ntp_tiles/icon_cacher.h b/components/ntp_tiles/icon_cacher.h index e7456fd..bfea296 100644 --- a/components/ntp_tiles/icon_cacher.h +++ b/components/ntp_tiles/icon_cacher.h
@@ -20,10 +20,10 @@ public: virtual ~IconCacher() = default; - // Fetches the icon if necessary. It invokes |icon_available| if a new icon - // was fetched. This is the only required callback. + // Fetches the icon if necessary. If a new icon was fetched, the optional + // |icon_available| callback will be invoked. // If there are preliminary icons (e.g. provided by static resources), the - // |preliminary_icon_available| callback will be invoked additionally. + // optional |preliminary_icon_available| callback will be invoked in addition. // TODO(fhorschig): In case we keep these, make them OnceClosures. virtual void StartFetch(PopularSites::Site site, const base::Closure& icon_available,
diff --git a/components/ntp_tiles/icon_cacher_impl.cc b/components/ntp_tiles/icon_cacher_impl.cc index aa4e911..6c7076f8 100644 --- a/components/ntp_tiles/icon_cacher_impl.cc +++ b/components/ntp_tiles/icon_cacher_impl.cc
@@ -49,7 +49,6 @@ PopularSites::Site site, const base::Closure& icon_available, const base::Closure& preliminary_icon_available) { - DCHECK(!icon_available.is_null()); favicon::GetFaviconImageForPageURL( favicon_service_, site.url, IconType(site), base::Bind(&IconCacherImpl::OnGetFaviconImageForPageURLFinished, @@ -85,7 +84,9 @@ } SaveIconForSite(site, fetched_image); - icon_available.Run(); + if (icon_available) { + icon_available.Run(); + } } void IconCacherImpl::SaveIconForSite(const PopularSites::Site& site,
diff --git a/components/ntp_tiles/icon_cacher_impl_unittest.cc b/components/ntp_tiles/icon_cacher_impl_unittest.cc index 721aa00..bab8c30 100644 --- a/components/ntp_tiles/icon_cacher_impl_unittest.cc +++ b/components/ntp_tiles/icon_cacher_impl_unittest.cc
@@ -275,6 +275,16 @@ EXPECT_FALSE(IconIsCachedFor(site_.url, favicon_base::TOUCH_ICON)); } +TEST_F(IconCacherTest, HandlesEmptyCallbacksNicely) { + EXPECT_CALL(*image_fetcher_, SetDataUseServiceName(_)); + EXPECT_CALL(*image_fetcher_, SetDesiredImageFrameSize(_)); + ON_CALL(*image_fetcher_, StartOrQueueNetworkRequest(_, _, _)) + .WillByDefault(PassFetch(128, 128)); + IconCacherImpl cacher(&favicon_service_, std::move(image_fetcher_)); + cacher.StartFetch(site_, base::Closure(), base::Closure()); + WaitForTasksToFinish(); +} + TEST_F(IconCacherTest, ProvidesDefaultIconAndSucceedsWithFetching) { // We are not interested which delegate function actually handles the call to // |GetNativeImageNamed| as long as we receive the right image.
diff --git a/components/omnibox/browser/in_memory_url_index_types.h b/components/omnibox/browser/in_memory_url_index_types.h index 6d38a79f..d3e656c 100644 --- a/components/omnibox/browser/in_memory_url_index_types.h +++ b/components/omnibox/browser/in_memory_url_index_types.h
@@ -8,9 +8,9 @@ #include <stddef.h> #include <map> -#include <set> #include <vector> +#include "base/containers/flat_set.h" #include "base/containers/hash_tables.h" #include "base/strings/string16.h" #include "components/history/core/browser/history_types.h" @@ -69,8 +69,8 @@ // Convenience Types ----------------------------------------------------------- typedef std::vector<base::string16> String16Vector; -typedef std::set<base::string16> String16Set; -typedef std::set<base::char16> Char16Set; +typedef base::flat_set<base::string16> String16Set; +typedef base::flat_set<base::char16> Char16Set; typedef std::vector<base::char16> Char16Vector; // A vector that contains the offsets at which each word starts within a string. @@ -131,12 +131,12 @@ typedef std::map<base::string16, WordID> WordMap; // A map from character to the word_ids of words containing that character. -typedef std::set<WordID> WordIDSet; // An index into the WordList. +typedef base::flat_set<WordID> WordIDSet; // An index into the WordList. typedef std::map<base::char16, WordIDSet> CharWordIDMap; // A map from word (by word_id) to history items containing that word. typedef history::URLID HistoryID; -typedef std::set<HistoryID> HistoryIDSet; +typedef base::flat_set<HistoryID> HistoryIDSet; typedef std::vector<HistoryID> HistoryIDVector; typedef std::map<WordID, HistoryIDSet> WordIDHistoryMap; typedef std::map<HistoryID, WordIDSet> HistoryIDWordMap;
diff --git a/components/omnibox/browser/url_index_private_data.cc b/components/omnibox/browser/url_index_private_data.cc index e410239..63b41107 100644 --- a/components/omnibox/browser/url_index_private_data.cc +++ b/components/omnibox/browser/url_index_private_data.cc
@@ -483,12 +483,10 @@ // TODO(dyaroshev): write a generic algorithm(crbug.com/696167). for (String16Vector::iterator iter = words.begin(); iter != words.end(); ++iter) { - base::string16 uni_word = *iter; - HistoryIDSet term_history_set = HistoryIDsForTerm(uni_word); - if (term_history_set.empty()) { - history_ids.clear(); - break; - } + HistoryIDSet term_history_set = HistoryIDsForTerm(*iter); + if (term_history_set.empty()) + return HistoryIDVector(); + if (iter == words.begin()) { history_ids = {term_history_set.begin(), term_history_set.end()}; } else { @@ -588,28 +586,30 @@ // We must filter the word list because the resulting word set surely // contains words which do not have the search term as a proper subset. - for (WordIDSet::iterator word_set_iter = word_id_set.begin(); - word_set_iter != word_id_set.end(); ) { - if (word_list_[*word_set_iter].find(term) == base::string16::npos) - word_set_iter = word_id_set.erase(word_set_iter); - else - ++word_set_iter; - } + word_id_set.erase(std::remove_if(word_id_set.begin(), word_id_set.end(), + [&](WordID word_id) { + return word_list_[word_id].find(term) == + base::string16::npos; + }), + word_id_set.end()); } else { word_id_set = WordIDSetForTermChars(Char16SetFromString16(term)); } // If any words resulted then we can compose a set of history IDs by unioning // the sets from each word. - HistoryIDSet history_id_set; + // We use |buffer| because it's more efficient to collect everything and then + // construct a flat_set than to insert elements one by one. + HistoryIDVector buffer; for (WordID word_id : word_id_set) { WordIDHistoryMap::iterator word_iter = word_id_history_map_.find(word_id); if (word_iter != word_id_history_map_.end()) { HistoryIDSet& word_history_id_set(word_iter->second); - history_id_set.insert(word_history_id_set.begin(), - word_history_id_set.end()); + buffer.insert(buffer.end(), word_history_id_set.begin(), + word_history_id_set.end()); } } + HistoryIDSet history_id_set(buffer.begin(), buffer.end()); // Record a new cache entry for this word if the term is longer than // a single character. @@ -627,24 +627,19 @@ for (Char16Set::const_iterator c_iter = term_chars.begin(); c_iter != term_chars.end(); ++c_iter) { CharWordIDMap::iterator char_iter = char_word_map_.find(*c_iter); - if (char_iter == char_word_map_.end()) { - // A character was not found so there are no matching results: bail. - word_id_set.clear(); - break; - } - WordIDSet& char_word_id_set(char_iter->second); + // A character was not found so there are no matching results: bail. + if (char_iter == char_word_map_.end()) + return WordIDSet(); + + const WordIDSet& char_word_id_set(char_iter->second); // It is possible for there to no longer be any words associated with // a particular character. Give up in that case. - if (char_word_id_set.empty()) { - word_id_set.clear(); - break; - } + if (char_word_id_set.empty()) + return WordIDSet(); if (c_iter == term_chars.begin()) { - // First character results becomes base set of results. word_id_set = char_word_id_set; } else { - // Subsequent character results get intersected in. word_id_set = base::STLSetIntersection<WordIDSet>(word_id_set, char_word_id_set); } @@ -709,7 +704,7 @@ num_matches, now); // Filter new matches that ended up scoring 0. (These are usually matches // which didn't match the user's raw terms.) - if (new_scored_match.raw_score != 0) + if (new_scored_match.raw_score > 0) scored_items->push_back(std::move(new_scored_match)); } }
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder.cc b/gpu/command_buffer/service/gles2_cmd_decoder.cc index 15aa3b1b..4662082 100644 --- a/gpu/command_buffer/service/gles2_cmd_decoder.cc +++ b/gpu/command_buffer/service/gles2_cmd_decoder.cc
@@ -14012,7 +14012,11 @@ std::string("can not be used with depth or stencil textures"); return false; } - if (feature_info_->IsWebGL2OrES3Context()) { + if (feature_info_->IsWebGL2OrES3Context() || + (feature_info_->feature_flags().chromium_color_buffer_float_rgb && + internal_format == GL_RGB32F) || + (feature_info_->feature_flags().chromium_color_buffer_float_rgba && + internal_format == GL_RGBA32F)) { if (GLES2Util::IsSizedColorFormat(internal_format)) { int sr, sg, sb, sa; GLES2Util::GetColorFormatComponentSizes( @@ -16355,12 +16359,20 @@ case GL_RG16F: case GL_RG32F: case GL_RGB16F: - case GL_RGB32F: case GL_RGBA16F: - case GL_RGBA32F: case GL_R11F_G11F_B10F: valid_dest_format = feature_info_->ext_color_buffer_float_available(); break; + case GL_RGB32F: + valid_dest_format = + feature_info_->ext_color_buffer_float_available() || + feature_info_->feature_flags().chromium_color_buffer_float_rgb; + break; + case GL_RGBA32F: + valid_dest_format = + feature_info_->ext_color_buffer_float_available() || + feature_info_->feature_flags().chromium_color_buffer_float_rgba; + break; default: valid_dest_format = false; break;
diff --git a/gpu/command_buffer/tests/gl_copy_texture_CHROMIUM_unittest.cc b/gpu/command_buffer/tests/gl_copy_texture_CHROMIUM_unittest.cc index 5be1671..94d904f8 100644 --- a/gpu/command_buffer/tests/gl_copy_texture_CHROMIUM_unittest.cc +++ b/gpu/command_buffer/tests/gl_copy_texture_CHROMIUM_unittest.cc
@@ -773,6 +773,56 @@ } } +TEST_P(GLCopyTextureCHROMIUMTest, InternalFormatRGBFloat) { + if (!GLTestHelper::HasExtension("GL_CHROMIUM_color_buffer_float_rgb")) { + LOG(INFO) + << "GL_CHROMIUM_color_buffer_float_rgb not supported. Skipping test..."; + return; + } + // TODO(qiankun.miao@intel.com): since RunCopyTexture requires dest texture to + // be texture complete, skip this test if float texture is not color + // filterable. We should remove this limitation when we find a way doesn't + // require dest texture to be texture complete in RunCopyTexture. + if (!gl_.decoder() + ->GetFeatureInfo() + ->feature_flags() + .enable_texture_float_linear) { + LOG(INFO) << "RGB32F texture is not filterable. Skipping test..."; + return; + } + CopyType copy_type = GetParam(); + FormatType src_format_type = {GL_RGBA, GL_RGBA, GL_UNSIGNED_BYTE}; + FormatType dest_format_type = {GL_RGB32F, GL_RGB, GL_FLOAT}; + + RunCopyTexture(GL_TEXTURE_2D, copy_type, src_format_type, 0, dest_format_type, + 0, false); +} + +TEST_P(GLCopyTextureCHROMIUMTest, InternalFormatRGBAFloat) { + if (!GLTestHelper::HasExtension("GL_CHROMIUM_color_buffer_float_rgba")) { + LOG(INFO) << "GL_CHROMIUM_color_buffer_float_rgba not supported. Skipping " + "test..."; + return; + } + // TODO(qiankun.miao@intel.com): since RunCopyTexture requires dest texture to + // be texture complete, skip this test if float texture is not color + // filterable. We should remove this limitation when we find a way doesn't + // require dest texture to be texture complete in RunCopyTexture. + if (!gl_.decoder() + ->GetFeatureInfo() + ->feature_flags() + .enable_texture_float_linear) { + LOG(INFO) << "RGBA32F texture is not filterable. Skipping test..."; + return; + } + CopyType copy_type = GetParam(); + FormatType src_format_type = {GL_RGBA, GL_RGBA, GL_UNSIGNED_BYTE}; + FormatType dest_format_type = {GL_RGBA32F, GL_RGBA, GL_FLOAT}; + + RunCopyTexture(GL_TEXTURE_2D, copy_type, src_format_type, 0, dest_format_type, + 0, false); +} + TEST_P(GLCopyTextureCHROMIUMTest, InternalFormatNotSupported) { CopyType copy_type = GetParam(); CreateAndBindDestinationTextureAndFBO(GL_TEXTURE_2D);
diff --git a/ios/chrome/app/main_controller.mm b/ios/chrome/app/main_controller.mm index eb72f383..86e67ba 100644 --- a/ios/chrome/app/main_controller.mm +++ b/ios/chrome/app/main_controller.mm
@@ -2613,7 +2613,7 @@ callbackCounter->IncrementCount(); [self removeBrowsingDataFromBrowserState:_mainBrowserState mask:removeAllMask - timePeriod:browsing_data::ALL_TIME + timePeriod:browsing_data::TimePeriod::ALL_TIME completionHandler:decrementCallbackCounterCount]; }
diff --git a/ios/chrome/browser/browsing_data/browsing_data_counter_wrapper.cc b/ios/chrome/browser/browsing_data/browsing_data_counter_wrapper.cc index fb0a8b98..c72b093d 100644 --- a/ios/chrome/browser/browsing_data/browsing_data_counter_wrapper.cc +++ b/ios/chrome/browser/browsing_data/browsing_data_counter_wrapper.cc
@@ -38,7 +38,7 @@ PrefService* pref_service, const UpdateUICallback& update_ui_callback) : counter_(std::move(counter)), update_ui_callback_(update_ui_callback) { - counter_->Init(pref_service, + counter_->Init(pref_service, browsing_data::ClearBrowsingDataTab::ADVANCED, base::Bind(&BrowsingDataCounterWrapper::UpdateWithResult, base::Unretained(this))); }
diff --git a/ios/chrome/browser/browsing_data/browsing_data_removal_controller.mm b/ios/chrome/browser/browsing_data/browsing_data_removal_controller.mm index a04ec4d41..50ce158 100644 --- a/ios/chrome/browser/browsing_data/browsing_data_removal_controller.mm +++ b/ios/chrome/browser/browsing_data/browsing_data_removal_controller.mm
@@ -173,7 +173,7 @@ decrementCallbackCounterCount]; if (mask & IOSChromeBrowsingDataRemover::REMOVE_DOWNLOADS) { - DCHECK_EQ(browsing_data::ALL_TIME, timePeriod) + DCHECK_EQ(browsing_data::TimePeriod::ALL_TIME, timePeriod) << "Partial clearing not supported"; callbackCounter->IncrementCount(); [_delegate
diff --git a/ios/chrome/browser/browsing_data/cache_counter_unittest.cc b/ios/chrome/browser/browsing_data/cache_counter_unittest.cc index bf6b87c..f6c41f8 100644 --- a/ios/chrome/browser/browsing_data/cache_counter_unittest.cc +++ b/ios/chrome/browser/browsing_data/cache_counter_unittest.cc
@@ -35,7 +35,7 @@ CacheCounterTest() { prefs_.registry()->RegisterIntegerPref( browsing_data::prefs::kDeleteTimePeriod, - static_cast<int>(browsing_data::ALL_TIME)); + static_cast<int>(browsing_data::TimePeriod::ALL_TIME)); prefs_.registry()->RegisterBooleanPref(browsing_data::prefs::kDeleteCache, true); @@ -236,8 +236,9 @@ // Tests that for the empty cache, the result is zero. TEST_F(CacheCounterTest, Empty) { CacheCounter counter(browser_state()); - counter.Init(prefs(), base::Bind(&CacheCounterTest::CountingCallback, - base::Unretained(this))); + counter.Init( + prefs(), browsing_data::ClearBrowsingDataTab::ADVANCED, + base::Bind(&CacheCounterTest::CountingCallback, base::Unretained(this))); counter.Restart(); WaitForIOThread(); @@ -251,8 +252,9 @@ CreateCacheEntry(); CacheCounter counter(browser_state()); - counter.Init(prefs(), base::Bind(&CacheCounterTest::CountingCallback, - base::Unretained(this))); + counter.Init( + prefs(), browsing_data::ClearBrowsingDataTab::ADVANCED, + base::Bind(&CacheCounterTest::CountingCallback, base::Unretained(this))); counter.Restart(); WaitForIOThread(); @@ -271,8 +273,9 @@ SetCacheDeletionPref(false); CacheCounter counter(browser_state()); - counter.Init(prefs(), base::Bind(&CacheCounterTest::CountingCallback, - base::Unretained(this))); + counter.Init( + prefs(), browsing_data::ClearBrowsingDataTab::ADVANCED, + base::Bind(&CacheCounterTest::CountingCallback, base::Unretained(this))); SetCacheDeletionPref(true); WaitForIOThread(); @@ -287,26 +290,27 @@ CreateCacheEntry(); CacheCounter counter(browser_state()); - counter.Init(prefs(), base::Bind(&CacheCounterTest::CountingCallback, - base::Unretained(this))); + counter.Init( + prefs(), browsing_data::ClearBrowsingDataTab::ADVANCED, + base::Bind(&CacheCounterTest::CountingCallback, base::Unretained(this))); - SetDeletionPeriodPref(browsing_data::LAST_HOUR); + SetDeletionPeriodPref(browsing_data::TimePeriod::LAST_HOUR); WaitForIOThread(); browsing_data::BrowsingDataCounter::ResultInt result = GetResult(); - SetDeletionPeriodPref(browsing_data::LAST_DAY); + SetDeletionPeriodPref(browsing_data::TimePeriod::LAST_DAY); WaitForIOThread(); EXPECT_EQ(result, GetResult()); - SetDeletionPeriodPref(browsing_data::LAST_WEEK); + SetDeletionPeriodPref(browsing_data::TimePeriod::LAST_WEEK); WaitForIOThread(); EXPECT_EQ(result, GetResult()); - SetDeletionPeriodPref(browsing_data::FOUR_WEEKS); + SetDeletionPeriodPref(browsing_data::TimePeriod::FOUR_WEEKS); WaitForIOThread(); EXPECT_EQ(result, GetResult()); - SetDeletionPeriodPref(browsing_data::ALL_TIME); + SetDeletionPeriodPref(browsing_data::TimePeriod::ALL_TIME); WaitForIOThread(); EXPECT_EQ(result, GetResult()); }
diff --git a/ios/chrome/browser/browsing_data/ios_chrome_browsing_data_remover.mm b/ios/chrome/browser/browsing_data/ios_chrome_browsing_data_remover.mm index 4f8a1cd6..1600961 100644 --- a/ios/chrome/browser/browsing_data/ios_chrome_browsing_data_remover.mm +++ b/ios/chrome/browser/browsing_data/ios_chrome_browsing_data_remover.mm
@@ -96,19 +96,19 @@ ios::ChromeBrowserState* browser_state, browsing_data::TimePeriod period) { switch (period) { - case browsing_data::LAST_HOUR: + case browsing_data::TimePeriod::LAST_HOUR: base::RecordAction(UserMetricsAction("ClearBrowsingData_LastHour")); break; - case browsing_data::LAST_DAY: + case browsing_data::TimePeriod::LAST_DAY: base::RecordAction(UserMetricsAction("ClearBrowsingData_LastDay")); break; - case browsing_data::LAST_WEEK: + case browsing_data::TimePeriod::LAST_WEEK: base::RecordAction(UserMetricsAction("ClearBrowsingData_LastWeek")); break; - case browsing_data::FOUR_WEEKS: + case browsing_data::TimePeriod::FOUR_WEEKS: base::RecordAction(UserMetricsAction("ClearBrowsingData_LastMonth")); break; - case browsing_data::ALL_TIME: + case browsing_data::TimePeriod::ALL_TIME: base::RecordAction(UserMetricsAction("ClearBrowsingData_Everything")); break; }
diff --git a/ios/chrome/browser/signin/browser_state_data_remover.mm b/ios/chrome/browser/signin/browser_state_data_remover.mm index 7a3ba5c..40f2a359 100644 --- a/ios/chrome/browser/signin/browser_state_data_remover.mm +++ b/ios/chrome/browser/signin/browser_state_data_remover.mm
@@ -52,7 +52,7 @@ [[ClearBrowsingDataCommand alloc] initWithBrowserState:browser_state_ mask:kRemoveAllDataMask - timePeriod:browsing_data::ALL_TIME]); + timePeriod:browsing_data::TimePeriod::ALL_TIME]); UIWindow* mainWindow = [[UIApplication sharedApplication] keyWindow]; DCHECK(mainWindow);
diff --git a/ios/chrome/browser/ui/settings/clear_browsing_data_collection_view_controller.mm b/ios/chrome/browser/ui/settings/clear_browsing_data_collection_view_controller.mm index 125e0fd..33feb18a 100644 --- a/ios/chrome/browser/ui/settings/clear_browsing_data_collection_view_controller.mm +++ b/ios/chrome/browser/ui/settings/clear_browsing_data_collection_view_controller.mm
@@ -192,12 +192,14 @@ int prefValue = browserState->GetPrefs()->GetInteger( browsing_data::prefs::kDeleteTimePeriod); prefValue = MAX(0, prefValue); - if (prefValue > browsing_data::TIME_PERIOD_LAST) { - prefValue = browsing_data::TIME_PERIOD_LAST; + const int maxValue = + static_cast<int>(browsing_data::TimePeriod::TIME_PERIOD_LAST); + if (prefValue > maxValue) { + prefValue = maxValue; } _timePeriod = static_cast<browsing_data::TimePeriod>(prefValue); } else { - _timePeriod = browsing_data::ALL_TIME; + _timePeriod = browsing_data::TimePeriod::ALL_TIME; } self.title = l10n_util::GetNSString(IDS_IOS_CLEAR_BROWSING_DATA_TITLE); @@ -803,7 +805,7 @@ (~NSByteCountFormatterUseKB); formatter.get().countStyle = NSByteCountFormatterCountStyleMemory; NSString* formattedSize = [formatter stringFromByteCount:cacheSizeBytes]; - return (_timePeriod == browsing_data::ALL_TIME) + return (_timePeriod == browsing_data::TimePeriod::ALL_TIME) ? formattedSize : l10n_util::GetNSStringF( IDS_DEL_CACHE_COUNTER_UPPER_ESTIMATE,
diff --git a/ios/chrome/browser/ui/settings/clear_browsing_data_collection_view_controller_unittest.mm b/ios/chrome/browser/ui/settings/clear_browsing_data_collection_view_controller_unittest.mm index f2deed4..a4a3f94 100644 --- a/ios/chrome/browser/ui/settings/clear_browsing_data_collection_view_controller_unittest.mm +++ b/ios/chrome/browser/ui/settings/clear_browsing_data_collection_view_controller_unittest.mm
@@ -234,7 +234,7 @@ ASSERT_EQ("en", GetApplicationContext()->GetApplicationLocale()); PrefService* prefs = browser_state_->GetPrefs(); prefs->SetInteger(browsing_data::prefs::kDeleteTimePeriod, - browsing_data::ALL_TIME); + static_cast<int>(browsing_data::TimePeriod::ALL_TIME)); CacheCounter counter(browser_state_.get()); // Test multiple possible types of formatting. @@ -274,7 +274,7 @@ } PrefService* prefs = browser_state_->GetPrefs(); prefs->SetInteger(browsing_data::prefs::kDeleteTimePeriod, - browsing_data::LAST_HOUR); + static_cast<int>(browsing_data::TimePeriod::LAST_HOUR)); CacheCounter counter(browser_state_.get()); // Test multiple possible types of formatting.
diff --git a/ios/chrome/browser/ui/settings/time_range_selector_collection_view_controller.mm b/ios/chrome/browser/ui/settings/time_range_selector_collection_view_controller.mm index 7fc05006..10a7895 100644 --- a/ios/chrome/browser/ui/settings/time_range_selector_collection_view_controller.mm +++ b/ios/chrome/browser/ui/settings/time_range_selector_collection_view_controller.mm
@@ -37,8 +37,10 @@ IDS_IOS_CLEAR_BROWSING_DATA_TIME_RANGE_OPTION_LAST_FOUR_WEEKS, IDS_IOS_CLEAR_BROWSING_DATA_TIME_RANGE_OPTION_BEGINNING_OF_TIME}; -static_assert(arraysize(kStringIDS) == browsing_data::TIME_PERIOD_LAST + 1, - "Strings have to match the enum values."); +static_assert( + arraysize(kStringIDS) == + static_cast<int>(browsing_data::TimePeriod::TIME_PERIOD_LAST) + 1, + "Strings have to match the enum values."); } // namespace @@ -150,7 +152,8 @@ NSInteger itemType = [self.collectionViewModel itemTypeForIndexPath:indexPath]; int timePeriod = itemType - kItemTypeEnumZero; - DCHECK_LE(timePeriod, browsing_data::TIME_PERIOD_LAST); + DCHECK_LE(timePeriod, + static_cast<int>(browsing_data::TimePeriod::TIME_PERIOD_LAST)); [self updatePrefValue:timePeriod]; [_weakDelegate timeRangeSelectorViewController:self
diff --git a/ios/chrome/test/app/history_test_util.mm b/ios/chrome/test/app/history_test_util.mm index aa760d9..1d9d8d9d 100644 --- a/ios/chrome/test/app/history_test_util.mm +++ b/ios/chrome/test/app/history_test_util.mm
@@ -28,7 +28,7 @@ removeBrowsingDataFromBrowserState:active_state mask:IOSChromeBrowsingDataRemover:: REMOVE_HISTORY - timePeriod:browsing_data::ALL_TIME + timePeriod:browsing_data::TimePeriod::ALL_TIME completionHandler:^{ callback_counter->DecrementCount(); did_complete = true;
diff --git a/net/BUILD.gn b/net/BUILD.gn index a69f7ce5..5334ba8 100644 --- a/net/BUILD.gn +++ b/net/BUILD.gn
@@ -397,9 +397,6 @@ "base/cache_type.h", "base/chunked_upload_data_stream.cc", "base/chunked_upload_data_stream.h", - "base/crypto_module.h", - "base/crypto_module_nss.cc", - "base/crypto_module_openssl.cc", "base/data_url.cc", "base/data_url.h", "base/elements_upload_data_stream.cc", @@ -1693,7 +1690,6 @@ if (!use_openssl_certs) { sources -= [ - "base/crypto_module_openssl.cc", "cert/cert_database_openssl.cc", "cert/cert_verify_proc_openssl.cc", "cert/cert_verify_proc_openssl.h", @@ -1726,7 +1722,6 @@ if (!use_nss_certs) { sources -= [ - "base/crypto_module_nss.cc", "cert/cert_database_nss.cc", "cert/internal/cert_issuer_source_nss.cc", "cert/internal/cert_issuer_source_nss.h", @@ -2121,10 +2116,6 @@ visibility = [ ":test_support" ] testonly = true sources = [ - "data/quic_http_response_cache_data_with_push/test.example.com/favicon.ico", - "data/quic_http_response_cache_data_with_push/test.example.com/index.html", - "data/quic_http_response_cache_data_with_push/test.example.com/index2.html", - "data/quic_http_response_cache_data_with_push/test.example.com/kitten-1.jpg", "data/ssl/certificates/1024-rsa-ee-by-1024-rsa-intermediate.pem", "data/ssl/certificates/1024-rsa-ee-by-2048-rsa-intermediate.pem", "data/ssl/certificates/1024-rsa-ee-by-768-rsa-intermediate.pem",
diff --git a/net/base/crypto_module.h b/net/base/crypto_module.h deleted file mode 100644 index 67e8a17..0000000 --- a/net/base/crypto_module.h +++ /dev/null
@@ -1,51 +0,0 @@ -// Copyright (c) 2011 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef NET_BASE_CRYPTO_MODULE_H_ -#define NET_BASE_CRYPTO_MODULE_H_ - -#include <string> -#include <vector> - -#include "base/macros.h" -#include "base/memory/ref_counted.h" -#include "net/base/net_export.h" - -#if defined(USE_NSS_CERTS) -typedef struct PK11SlotInfoStr PK11SlotInfo; -#endif - -namespace net { - -class CryptoModule; - -class NET_EXPORT CryptoModule - : public base::RefCountedThreadSafe<CryptoModule> { - public: -#if defined(USE_NSS_CERTS) - typedef PK11SlotInfo* OSModuleHandle; -#else - typedef void* OSModuleHandle; -#endif - - OSModuleHandle os_module_handle() const { return module_handle_; } - - std::string GetTokenName() const; - - static CryptoModule* CreateFromHandle(OSModuleHandle handle); - - private: - friend class base::RefCountedThreadSafe<CryptoModule>; - - explicit CryptoModule(OSModuleHandle handle); - ~CryptoModule(); - - OSModuleHandle module_handle_; - - DISALLOW_COPY_AND_ASSIGN(CryptoModule); -}; - -} // namespace net - -#endif // NET_BASE_CRYPTO_MODULE_H_
diff --git a/net/base/crypto_module_nss.cc b/net/base/crypto_module_nss.cc deleted file mode 100644 index df52ae9..0000000 --- a/net/base/crypto_module_nss.cc +++ /dev/null
@@ -1,28 +0,0 @@ -// Copyright (c) 2010 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "net/base/crypto_module.h" - -#include <pk11pub.h> - -namespace net { - -std::string CryptoModule::GetTokenName() const { - return PK11_GetTokenName(module_handle_); -} - -// static -CryptoModule* CryptoModule::CreateFromHandle(OSModuleHandle handle) { - return new CryptoModule(handle); -} - -CryptoModule::CryptoModule(OSModuleHandle handle) : module_handle_(handle) { - PK11_ReferenceSlot(module_handle_); -} - -CryptoModule::~CryptoModule() { - PK11_FreeSlot(module_handle_); -} - -} // namespace net
diff --git a/net/base/crypto_module_openssl.cc b/net/base/crypto_module_openssl.cc deleted file mode 100644 index 3ef050fc..0000000 --- a/net/base/crypto_module_openssl.cc +++ /dev/null
@@ -1,27 +0,0 @@ -// Copyright (c) 2011 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "base/logging.h" -#include "net/base/crypto_module.h" - -namespace net { - -std::string CryptoModule::GetTokenName() const { - NOTIMPLEMENTED(); - return ""; -} - -// static -CryptoModule* CryptoModule::CreateFromHandle(OSModuleHandle handle) { - NOTIMPLEMENTED(); - return NULL; -} - -CryptoModule::CryptoModule(OSModuleHandle handle) : module_handle_(handle) { -} - -CryptoModule::~CryptoModule() { -} - -} // namespace net
diff --git a/net/cert/nss_cert_database.cc b/net/cert/nss_cert_database.cc index 7a580d6..4490daf5 100644 --- a/net/cert/nss_cert_database.cc +++ b/net/cert/nss_cert_database.cc
@@ -22,7 +22,6 @@ #include "base/task_runner_util.h" #include "base/threading/worker_pool.h" #include "crypto/scoped_nss_types.h" -#include "net/base/crypto_module.h" #include "net/base/net_errors.h" #include "net/cert/cert_database.h" #include "net/cert/x509_certificate.h"
diff --git a/net/cert/nss_cert_database_chromeos.cc b/net/cert/nss_cert_database_chromeos.cc index 9f4f916..c92433b2 100644 --- a/net/cert/nss_cert_database_chromeos.cc +++ b/net/cert/nss_cert_database_chromeos.cc
@@ -15,7 +15,6 @@ #include "base/callback.h" #include "base/location.h" #include "base/task_runner.h" -#include "net/base/crypto_module.h" #include "net/cert/x509_certificate.h" namespace net {
diff --git a/net/cert/nss_cert_database_unittest.cc b/net/cert/nss_cert_database_unittest.cc index 235ea44c..4e3b60b4 100644 --- a/net/cert/nss_cert_database_unittest.cc +++ b/net/cert/nss_cert_database_unittest.cc
@@ -22,7 +22,6 @@ #include "base/threading/thread_task_runner_handle.h" #include "crypto/scoped_nss_types.h" #include "crypto/scoped_test_nss_db.h" -#include "net/base/crypto_module.h" #include "net/base/hash_value.h" #include "net/base/net_errors.h" #include "net/cert/cert_status_flags.h"
diff --git a/net/http/http_cache.cc b/net/http/http_cache.cc index 904797a1..1dc390a 100644 --- a/net/http/http_cache.cc +++ b/net/http/http_cache.cc
@@ -38,7 +38,6 @@ #include "net/base/upload_data_stream.h" #include "net/disk_cache/disk_cache.h" #include "net/http/disk_cache_based_quic_server_info.h" -#include "net/http/http_cache_lookup_manager.h" #include "net/http/http_cache_transaction.h" #include "net/http/http_network_layer.h" #include "net/http/http_network_session.h" @@ -344,20 +343,14 @@ // Session may be NULL in unittests. // TODO(mmenke): Seems like tests could be changed to provide a session, // rather than having logic only used in unit tests here. - if (!session) - return; - - net_log_ = session->net_log(); - if (!is_main_cache) - return; - - session->SetServerPushDelegate( - base::MakeUnique<HttpCacheLookupManager>(this)); - - if (!session->quic_stream_factory()->has_quic_server_info_factory()) { - // QuicStreamFactory takes ownership of QuicServerInfoFactoryAdaptor. - session->quic_stream_factory()->set_quic_server_info_factory( - new QuicServerInfoFactoryAdaptor(this)); + if (session) { + net_log_ = session->net_log(); + if (is_main_cache && + !session->quic_stream_factory()->has_quic_server_info_factory()) { + // QuicStreamFactory takes ownership of QuicServerInfoFactoryAdaptor. + session->quic_stream_factory()->set_quic_server_info_factory( + new QuicServerInfoFactoryAdaptor(this)); + } } }
diff --git a/net/http/http_network_session.cc b/net/http/http_network_session.cc index 54fe1593..b57653a 100644 --- a/net/http/http_network_session.cc +++ b/net/http/http_network_session.cc
@@ -398,9 +398,7 @@ void HttpNetworkSession::SetServerPushDelegate( std::unique_ptr<ServerPushDelegate> push_delegate) { - DCHECK(push_delegate); - if (!params_.enable_server_push_cancellation || push_delegate_) - return; + DCHECK(!push_delegate_ && push_delegate); push_delegate_ = std::move(push_delegate); spdy_session_pool_.set_server_push_delegate(push_delegate_.get());
diff --git a/net/http/http_network_session.h b/net/http/http_network_session.h index 47543fb1..b0ed8c0 100644 --- a/net/http/http_network_session.h +++ b/net/http/http_network_session.h
@@ -85,7 +85,6 @@ ClientSocketFactory* client_socket_factory; HostResolver* host_resolver; CertVerifier* cert_verifier; - bool enable_server_push_cancellation; ChannelIDService* channel_id_service; TransportSecurityState* transport_security_state; CTVerifier* cert_transparency_verifier;
diff --git a/net/quic/core/quic_server_session_base_test.cc b/net/quic/core/quic_server_session_base_test.cc index ec05f6ab..6e18cd5 100644 --- a/net/quic/core/quic_server_session_base_test.cc +++ b/net/quic/core/quic_server_session_base_test.cc
@@ -210,7 +210,6 @@ // Send a reset (and expect the peer to send a RST in response). QuicRstStreamFrame rst1(kClientDataStreamId1, QUIC_ERROR_PROCESSING_STREAM, 0); - EXPECT_CALL(owner_, OnRstStreamReceived(_)).Times(1); EXPECT_CALL(*connection_, SendRstStream(kClientDataStreamId1, QUIC_RST_ACKNOWLEDGEMENT, 0)); visitor_->OnRstStream(rst1); @@ -228,7 +227,6 @@ // Send a reset (and expect the peer to send a RST in response). QuicRstStreamFrame rst1(kClientDataStreamId1, QUIC_ERROR_PROCESSING_STREAM, 0); - EXPECT_CALL(owner_, OnRstStreamReceived(_)).Times(1); EXPECT_CALL(*connection_, SendRstStream(kClientDataStreamId1, QUIC_RST_ACKNOWLEDGEMENT, 0)); visitor_->OnRstStream(rst1); @@ -255,7 +253,6 @@ // Send a reset (and expect the peer to send a RST in response). QuicRstStreamFrame rst(kClientDataStreamId1, QUIC_ERROR_PROCESSING_STREAM, 0); - EXPECT_CALL(owner_, OnRstStreamReceived(_)).Times(1); EXPECT_CALL(*connection_, SendRstStream(kClientDataStreamId1, QUIC_RST_ACKNOWLEDGEMENT, 0)); visitor_->OnRstStream(rst);
diff --git a/net/quic/core/quic_session.cc b/net/quic/core/quic_session.cc index b4d73481..6160cdd 100644 --- a/net/quic/core/quic_session.cc +++ b/net/quic/core/quic_session.cc
@@ -95,10 +95,6 @@ return; } - if (visitor_) { - visitor_->OnRstStreamReceived(frame); - } - QuicStream* stream = GetOrCreateDynamicStream(frame.stream_id); if (!stream) { HandleRstOnValidNonexistentStream(frame);
diff --git a/net/quic/core/quic_session.h b/net/quic/core/quic_session.h index 2f80010..283f55f 100644 --- a/net/quic/core/quic_session.h +++ b/net/quic/core/quic_session.h
@@ -53,9 +53,6 @@ // Called when the session has become write blocked. virtual void OnWriteBlocked(QuicBlockedWriterInterface* blocked_writer) = 0; - - // Called when the session receives reset on a stream from the peer. - virtual void OnRstStreamReceived(const QuicRstStreamFrame& frame) = 0; }; // CryptoHandshakeEvent enumerates the events generated by a QuicCryptoStream.
diff --git a/net/spdy/spdy_session_unittest.cc b/net/spdy/spdy_session_unittest.cc index e83fd840..f0ab24a7 100644 --- a/net/spdy/spdy_session_unittest.cc +++ b/net/spdy/spdy_session_unittest.cc
@@ -146,7 +146,6 @@ g_time_delta = base::TimeDelta(); g_time_now = base::TimeTicks::Now(); session_deps_.net_log = log_.bound().net_log(); - session_deps_.enable_server_push_cancellation = true; } void CreateNetworkSession() {
diff --git a/net/spdy/spdy_test_util_common.cc b/net/spdy/spdy_test_util_common.cc index 0729125..1b2ef247 100644 --- a/net/spdy/spdy_test_util_common.cc +++ b/net/spdy/spdy_test_util_common.cc
@@ -341,7 +341,6 @@ enable_ping(false), enable_user_alternate_protocol_ports(false), enable_quic(false), - enable_server_push_cancellation(false), session_max_recv_window_size(kDefaultInitialWindowSize), time_func(&base::TimeTicks::Now), enable_http2_alternative_service_with_different_host(false), @@ -403,8 +402,6 @@ params.enable_user_alternate_protocol_ports = session_deps->enable_user_alternate_protocol_ports; params.enable_quic = session_deps->enable_quic; - params.enable_server_push_cancellation = - session_deps->enable_server_push_cancellation; params.spdy_session_max_recv_window_size = session_deps->session_max_recv_window_size; params.http2_settings = session_deps->http2_settings;
diff --git a/net/spdy/spdy_test_util_common.h b/net/spdy/spdy_test_util_common.h index 727145c8..62a0564 100644 --- a/net/spdy/spdy_test_util_common.h +++ b/net/spdy/spdy_test_util_common.h
@@ -207,7 +207,6 @@ bool enable_ping; bool enable_user_alternate_protocol_ports; bool enable_quic; - bool enable_server_push_cancellation; size_t session_max_recv_window_size; SettingsMap http2_settings; SpdySession::TimeFunc time_func;
diff --git a/net/tools/quic/quic_dispatcher.cc b/net/tools/quic/quic_dispatcher.cc index 4a1df9c..c99ea93 100644 --- a/net/tools/quic/quic_dispatcher.cc +++ b/net/tools/quic/quic_dispatcher.cc
@@ -524,8 +524,6 @@ write_blocked_list_.insert(std::make_pair(blocked_writer, true)); } -void QuicDispatcher::OnRstStreamReceived(const QuicRstStreamFrame& frame) {} - void QuicDispatcher::OnConnectionAddedToTimeWaitList( QuicConnectionId connection_id) { QUIC_DLOG(INFO) << "Connection " << connection_id
diff --git a/net/tools/quic/quic_dispatcher.h b/net/tools/quic/quic_dispatcher.h index a95fd8ab..266e3e4 100644 --- a/net/tools/quic/quic_dispatcher.h +++ b/net/tools/quic/quic_dispatcher.h
@@ -85,11 +85,6 @@ // Queues the blocked writer for later resumption. void OnWriteBlocked(QuicBlockedWriterInterface* blocked_writer) override; - // QuicSession::Visitor interface implementation (via inheritance of - // QuicTimeWaitListManager::Visitor): - // Collects reset error code received on streams. - void OnRstStreamReceived(const QuicRstStreamFrame& frame) override; - // QuicTimeWaitListManager::Visitor interface implementation // Called whenever the time wait list manager adds a new connection to the // time-wait list.
diff --git a/net/tools/quic/quic_simple_dispatcher.cc b/net/tools/quic/quic_simple_dispatcher.cc index e173624..cab2925 100644 --- a/net/tools/quic/quic_simple_dispatcher.cc +++ b/net/tools/quic/quic_simple_dispatcher.cc
@@ -26,26 +26,6 @@ QuicSimpleDispatcher::~QuicSimpleDispatcher() {} -int QuicSimpleDispatcher::GetRstErrorCount( - QuicRstStreamErrorCode error_code) const { - auto it = rst_error_map_.find(error_code); - if (it == rst_error_map_.end()) { - return 0; - } else { - return it->second; - } -} - -void QuicSimpleDispatcher::OnRstStreamReceived( - const QuicRstStreamFrame& frame) { - auto it = rst_error_map_.find(frame.error_code); - if (it == rst_error_map_.end()) { - rst_error_map_.insert(std::make_pair(frame.error_code, 1)); - } else { - it->second++; - } -} - QuicServerSessionBase* QuicSimpleDispatcher::CreateQuicSession( QuicConnectionId connection_id, const QuicSocketAddress& client_address) {
diff --git a/net/tools/quic/quic_simple_dispatcher.h b/net/tools/quic/quic_simple_dispatcher.h index 41d24cf..b9df6d9 100644 --- a/net/tools/quic/quic_simple_dispatcher.h +++ b/net/tools/quic/quic_simple_dispatcher.h
@@ -24,10 +24,6 @@ ~QuicSimpleDispatcher() override; - int GetRstErrorCount(QuicRstStreamErrorCode rst_error_code) const; - - void OnRstStreamReceived(const QuicRstStreamFrame& frame) override; - protected: QuicServerSessionBase* CreateQuicSession( QuicConnectionId connection_id, @@ -37,9 +33,6 @@ private: QuicHttpResponseCache* response_cache_; // Unowned. - - // The map of the reset error code with its counter. - std::map<QuicRstStreamErrorCode, int> rst_error_map_; }; } // namespace net
diff --git a/net/tools/quic/quic_simple_server_session_test.cc b/net/tools/quic/quic_simple_server_session_test.cc index 35db616..5d1cac2 100644 --- a/net/tools/quic/quic_simple_server_session_test.cc +++ b/net/tools/quic/quic_simple_server_session_test.cc
@@ -235,7 +235,6 @@ // Receive a reset (and send a RST in response). QuicRstStreamFrame rst1(kClientDataStreamId1, QUIC_ERROR_PROCESSING_STREAM, 0); - EXPECT_CALL(owner_, OnRstStreamReceived(_)).Times(1); EXPECT_CALL(*connection_, SendRstStream(kClientDataStreamId1, QUIC_RST_ACKNOWLEDGEMENT, 0)); visitor_->OnRstStream(rst1); @@ -253,7 +252,6 @@ // Send a reset (and expect the peer to send a RST in response). QuicRstStreamFrame rst1(kClientDataStreamId1, QUIC_ERROR_PROCESSING_STREAM, 0); - EXPECT_CALL(owner_, OnRstStreamReceived(_)).Times(1); EXPECT_CALL(*connection_, SendRstStream(kClientDataStreamId1, QUIC_RST_ACKNOWLEDGEMENT, 0)); visitor_->OnRstStream(rst1); @@ -280,7 +278,6 @@ // Send a reset (and expect the peer to send a RST in response). QuicRstStreamFrame rst(kClientDataStreamId1, QUIC_ERROR_PROCESSING_STREAM, 0); - EXPECT_CALL(owner_, OnRstStreamReceived(_)).Times(1); EXPECT_CALL(*connection_, SendRstStream(kClientDataStreamId1, QUIC_RST_ACKNOWLEDGEMENT, 0)); visitor_->OnRstStream(rst); @@ -572,7 +569,6 @@ // Reset the last stream in the queue. It should be marked cancelled. QuicStreamId stream_got_reset = num_resources * 2; QuicRstStreamFrame rst(stream_got_reset, QUIC_STREAM_CANCELLED, 0); - EXPECT_CALL(owner_, OnRstStreamReceived(_)).Times(1); EXPECT_CALL(*connection_, SendRstStream(stream_got_reset, QUIC_RST_ACKNOWLEDGEMENT, 0)); visitor_->OnRstStream(rst); @@ -617,7 +613,6 @@ .WillOnce(Return(QuicConsumedData(kStreamFlowControlWindowSize, false))); EXPECT_CALL(*connection_, SendBlocked(stream_to_open)); - EXPECT_CALL(owner_, OnRstStreamReceived(_)).Times(1); QuicRstStreamFrame rst(stream_got_reset, QUIC_STREAM_CANCELLED, 0); visitor_->OnRstStream(rst); }
diff --git a/net/tools/quic/test_tools/mock_quic_session_visitor.h b/net/tools/quic/test_tools/mock_quic_session_visitor.h index 793be8d4..ee1a6c7 100644 --- a/net/tools/quic/test_tools/mock_quic_session_visitor.h +++ b/net/tools/quic/test_tools/mock_quic_session_visitor.h
@@ -23,7 +23,6 @@ const std::string& error_details)); MOCK_METHOD1(OnWriteBlocked, void(QuicBlockedWriterInterface* blocked_writer)); - MOCK_METHOD1(OnRstStreamReceived, void(const QuicRstStreamFrame& frame)); MOCK_METHOD1(OnConnectionAddedToTimeWaitList, void(QuicConnectionId connection_id));
diff --git a/net/url_request/url_request_quic_unittest.cc b/net/url_request/url_request_quic_unittest.cc index f435d61..7532196 100644 --- a/net/url_request/url_request_quic_unittest.cc +++ b/net/url_request/url_request_quic_unittest.cc
@@ -15,17 +15,12 @@ #include "net/cert/mock_cert_verifier.h" #include "net/dns/mapped_host_resolver.h" #include "net/dns/mock_host_resolver.h" -#include "net/log/net_log_event_type.h" -#include "net/log/test_net_log.h" -#include "net/log/test_net_log_entry.h" #include "net/quic/chromium/crypto/proof_source_chromium.h" #include "net/quic/test_tools/crypto_test_utils.h" #include "net/test/cert_test_util.h" #include "net/test/gtest_util.h" #include "net/test/test_data_directory.h" -#include "net/tools/quic/quic_dispatcher.h" #include "net/tools/quic/quic_http_response_cache.h" -#include "net/tools/quic/quic_simple_dispatcher.h" #include "net/tools/quic/quic_simple_server.h" #include "net/url_request/url_request.h" #include "net/url_request/url_request_test_util.h" @@ -69,11 +64,9 @@ params->origins_to_force_quic_on.insert(HostPortPair(kTestServerHost, 443)); params->cert_verifier = &cert_verifier_; params->enable_quic = true; - params->enable_server_push_cancellation = true; context_->set_host_resolver(host_resolver_.get()); context_->set_http_network_session_params(std::move(params)); context_->set_cert_verifier(&cert_verifier_); - context_->set_net_log(&net_log_); } void TearDown() override { @@ -95,29 +88,11 @@ return context_->CreateRequest(url, priority, delegate); } - void ExtractNetLog(NetLogEventType type, - TestNetLogEntry::List* entry_list) const { - net::TestNetLogEntry::List entries; - net_log_.GetEntries(&entries); - - for (const auto& entry : entries) { - if (entry.type == type) - entry_list->push_back(entry); - } - } - - unsigned int GetRstErrorCountReceivedByServer( - QuicRstStreamErrorCode error_code) const { - return (static_cast<QuicSimpleDispatcher*>(server_->dispatcher())) - ->GetRstErrorCount(error_code); - } - private: void StartQuicServer() { // Set up in-memory cache. response_cache_.AddSimpleResponse(kTestServerHost, kHelloPath, kHelloStatus, kHelloBodyValue); - response_cache_.InitializeFromDirectory(ServerPushCacheDirectory()); net::QuicConfig config; // Set up server certs. std::unique_ptr<net::ProofSourceChromium> proof_source( @@ -145,19 +120,9 @@ EXPECT_TRUE(host_resolver_->AddRuleFromString(map_rule)); } - std::string ServerPushCacheDirectory() { - base::FilePath path; - PathService::Get(base::DIR_SOURCE_ROOT, &path); - path = path.AppendASCII("net").AppendASCII("data").AppendASCII( - "quic_http_response_cache_data_with_push"); - // The file path is known to be an ascii string. - return path.MaybeAsASCII(); - } - std::unique_ptr<MappedHostResolver> host_resolver_; std::unique_ptr<QuicSimpleServer> server_; std::unique_ptr<TestURLRequestContext> context_; - TestNetLog net_log_; QuicHttpResponseCache response_cache_; MockCertVerifier cert_verifier_; }; @@ -246,201 +211,6 @@ EXPECT_EQ(kHelloBodyValue, delegate.data_received()); } -TEST_F(URLRequestQuicTest, CancelPushIfCached) { - base::RunLoop run_loop; - WaitForCompletionNetworkDelegate network_delegate( - run_loop.QuitClosure(), /*num_expected_requests=*/2); - SetNetworkDelegate(&network_delegate); - - Init(); - { - // Send a request to the pushed url: /kitten-1.jpg to pull the resource into - // cache. - CheckLoadTimingDelegate delegate(false); - std::string url = - base::StringPrintf("https://%s%s", kTestServerHost, "/kitten-1.jpg"); - std::unique_ptr<URLRequest> request = - CreateRequest(GURL(url), DEFAULT_PRIORITY, &delegate); - - request->Start(); - ASSERT_TRUE(request->is_pending()); - base::RunLoop().Run(); - - EXPECT_TRUE(request->status().is_success()); - } - - // Send a request to /index2.html which pushes /kitten-1.jpg and /favicon.ico. - // Should cancel push for /kitten-1.jpg. - CheckLoadTimingDelegate delegate(true); - std::string url = - base::StringPrintf("https://%s%s", kTestServerHost, "/index2.html"); - std::unique_ptr<URLRequest> request = - CreateRequest(GURL(url), DEFAULT_PRIORITY, &delegate); - - request->Start(); - ASSERT_TRUE(request->is_pending()); - base::RunLoop().Run(); - - // Extract net logs on client side to verify push lookup transactions. - net::TestNetLogEntry::List entries; - ExtractNetLog(NetLogEventType::SERVER_PUSH_LOOKUP_TRANSACTION, &entries); - - EXPECT_EQ(4u, entries.size()); - - std::string value; - int net_error; - std::string push_url_1 = - base::StringPrintf("https://%s%s", kTestServerHost, "/kitten-1.jpg"); - std::string push_url_2 = - base::StringPrintf("https://%s%s", kTestServerHost, "/favicon.ico"); - - EXPECT_TRUE(entries[0].GetStringValue("push_url", &value)); - EXPECT_EQ(value, push_url_1); - // No net error code for this lookup transaction, the push is found. - EXPECT_FALSE(entries[1].GetIntegerValue("net_error", &net_error)); - - EXPECT_TRUE(entries[2].GetStringValue("push_url", &value)); - EXPECT_EQ(value, push_url_2); - // Net error code -400 is found for this lookup transaction, the push is not - // found in the cache. - EXPECT_TRUE(entries[3].GetIntegerValue("net_error", &net_error)); - EXPECT_EQ(net_error, -400); - - EXPECT_TRUE(request->status().is_success()); - - // Verify the reset error count received on the server side. - EXPECT_EQ(1u, GetRstErrorCountReceivedByServer(QUIC_STREAM_CANCELLED)); -} - -TEST_F(URLRequestQuicTest, CancelPushIfCached2) { - base::RunLoop run_loop; - WaitForCompletionNetworkDelegate network_delegate( - run_loop.QuitClosure(), /*num_expected_requests=*/3); - SetNetworkDelegate(&network_delegate); - - Init(); - { - // Send a request to the pushed url: /kitten-1.jpg to pull the resource into - // cache. - CheckLoadTimingDelegate delegate(false); - std::string url = - base::StringPrintf("https://%s%s", kTestServerHost, "/kitten-1.jpg"); - std::unique_ptr<URLRequest> request = - CreateRequest(GURL(url), DEFAULT_PRIORITY, &delegate); - - request->Start(); - ASSERT_TRUE(request->is_pending()); - base::RunLoop().Run(); - - EXPECT_TRUE(request->status().is_success()); - EXPECT_NE(network_delegate.total_network_bytes_sent(), 0u); - } - - { - // Send a request to the pushed url: /favicon.ico to pull the resource into - // cache. - CheckLoadTimingDelegate delegate(true); - std::string url = - base::StringPrintf("https://%s%s", kTestServerHost, "/favicon.ico"); - std::unique_ptr<URLRequest> request = - CreateRequest(GURL(url), DEFAULT_PRIORITY, &delegate); - - request->Start(); - ASSERT_TRUE(request->is_pending()); - base::RunLoop().Run(); - - EXPECT_TRUE(request->status().is_success()); - } - - // Send a request to /index2.html which pushes /kitten-1.jpg and /favicon.ico. - // Should cancel push for /kitten-1.jpg. - CheckLoadTimingDelegate delegate(true); - std::string url = - base::StringPrintf("https://%s%s", kTestServerHost, "/index2.html"); - std::unique_ptr<URLRequest> request = - CreateRequest(GURL(url), DEFAULT_PRIORITY, &delegate); - - request->Start(); - ASSERT_TRUE(request->is_pending()); - base::RunLoop().Run(); - - // Extract net logs on client side to verify push lookup transactions. - net::TestNetLogEntry::List entries; - ExtractNetLog(NetLogEventType::SERVER_PUSH_LOOKUP_TRANSACTION, &entries); - - EXPECT_EQ(4u, entries.size()); - - std::string value; - int net_error; - std::string push_url_1 = - base::StringPrintf("https://%s%s", kTestServerHost, "/kitten-1.jpg"); - std::string push_url_2 = - base::StringPrintf("https://%s%s", kTestServerHost, "/favicon.ico"); - - EXPECT_TRUE(entries[0].GetStringValue("push_url", &value)); - EXPECT_EQ(value, push_url_1); - // No net error code for this lookup transaction, the push is found. - EXPECT_FALSE(entries[1].GetIntegerValue("net_error", &net_error)); - - EXPECT_TRUE(entries[2].GetStringValue("push_url", &value)); - EXPECT_EQ(value, push_url_2); - // No net error code for this lookup transaction, the push is found. - EXPECT_FALSE(entries[3].GetIntegerValue("net_error", &net_error)); - - EXPECT_TRUE(request->status().is_success()); - - // Verify the reset error count received on the server side. - EXPECT_EQ(2u, GetRstErrorCountReceivedByServer(QUIC_STREAM_CANCELLED)); -} - -TEST_F(URLRequestQuicTest, DoNotCancelPushIfNotFoundInCache) { - base::RunLoop run_loop; - WaitForCompletionNetworkDelegate network_delegate( - run_loop.QuitClosure(), /*num_expected_requests=*/1); - SetNetworkDelegate(&network_delegate); - - Init(); - // Send a request to /index2.hmtl which pushes /kitten-1.jpg and /favicon.ico - // and shouldn't cancel any since neither is in cache. - CheckLoadTimingDelegate delegate(false); - std::string url = - base::StringPrintf("https://%s%s", kTestServerHost, "/index2.html"); - std::unique_ptr<URLRequest> request = - CreateRequest(GURL(url), DEFAULT_PRIORITY, &delegate); - - request->Start(); - ASSERT_TRUE(request->is_pending()); - base::RunLoop().Run(); - - // Extract net logs on client side to verify push lookup transactions. - net::TestNetLogEntry::List entries; - ExtractNetLog(NetLogEventType::SERVER_PUSH_LOOKUP_TRANSACTION, &entries); - - EXPECT_EQ(4u, entries.size()); - - std::string value; - int net_error; - std::string push_url_1 = - base::StringPrintf("https://%s%s", kTestServerHost, "/kitten-1.jpg"); - std::string push_url_2 = - base::StringPrintf("https://%s%s", kTestServerHost, "/favicon.ico"); - - EXPECT_TRUE(entries[0].GetStringValue("push_url", &value)); - EXPECT_EQ(value, push_url_1); - EXPECT_TRUE(entries[1].GetIntegerValue("net_error", &net_error)); - EXPECT_EQ(net_error, -400); - - EXPECT_TRUE(entries[2].GetStringValue("push_url", &value)); - EXPECT_EQ(value, push_url_2); - EXPECT_TRUE(entries[3].GetIntegerValue("net_error", &net_error)); - EXPECT_EQ(net_error, -400); - - EXPECT_TRUE(request->status().is_success()); - - // Verify the reset error count received on the server side. - EXPECT_EQ(0u, GetRstErrorCountReceivedByServer(QUIC_STREAM_CANCELLED)); -} - // Tests that if two requests use the same QUIC session, the second request // should not have |LoadTimingInfo::connect_timing|. TEST_F(URLRequestQuicTest, TestTwoRequests) {
diff --git a/net/url_request/url_request_test_util.cc b/net/url_request/url_request_test_util.cc index 5f7f123..1e905fd 100644 --- a/net/url_request/url_request_test_util.cc +++ b/net/url_request/url_request_test_util.cc
@@ -135,7 +135,7 @@ base::MakeUnique<HttpNetworkSession>(params)); context_storage_.set_http_transaction_factory(base::MakeUnique<HttpCache>( context_storage_.http_network_session(), - HttpCache::DefaultBackend::InMemory(0), true /* is_main_cache */)); + HttpCache::DefaultBackend::InMemory(0), false)); } if (!http_user_agent_settings()) { context_storage_.set_http_user_agent_settings(
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/selection/selection-and-text-repaint-expected.html b/third_party/WebKit/LayoutTests/paint/invalidation/selection/selection-and-text-repaint-expected.html new file mode 100644 index 0000000..ed7b1237 --- /dev/null +++ b/third_party/WebKit/LayoutTests/paint/invalidation/selection/selection-and-text-repaint-expected.html
@@ -0,0 +1,2 @@ +<!DOCTYPE html> +<p style="color:green">This text should be green.</p>
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/selection/selection-and-text-repaint.html b/third_party/WebKit/LayoutTests/paint/invalidation/selection/selection-and-text-repaint.html new file mode 100644 index 0000000..c4bdc0d --- /dev/null +++ b/third_party/WebKit/LayoutTests/paint/invalidation/selection/selection-and-text-repaint.html
@@ -0,0 +1,17 @@ +<!DOCTYPE html> +<style> + ::selection { color: red } + .green { color: green } +</style> +<p id="t1">This text should be green.</p> +<script> + if (window.testRunner) + testRunner.waitUntilDone(); + + requestAnimationFrame(() => + requestAnimationFrame(() => { + t1.className = "green"; + if (window.testRunner) + testRunner.notifyDone(); + })); +</script>
diff --git a/third_party/WebKit/Source/bindings/core/v8/ScriptStreamer.cpp b/third_party/WebKit/Source/bindings/core/v8/ScriptStreamer.cpp index 1ed3e48..c1f3134 100644 --- a/third_party/WebKit/Source/bindings/core/v8/ScriptStreamer.cpp +++ b/third_party/WebKit/Source/bindings/core/v8/ScriptStreamer.cpp
@@ -359,16 +359,12 @@ } bool ScriptStreamer::isFinished() const { - MutexLocker locker(m_mutex); + DCHECK(isMainThread()); return m_loadingFinished && (m_parsingFinished || m_streamingSuppressed); } void ScriptStreamer::streamingCompleteOnBackgroundThread() { DCHECK(!isMainThread()); - { - MutexLocker locker(m_mutex); - m_parsingFinished = true; - } // notifyFinished might already be called, or it might be called in the // future (if the parsing finishes earlier because of a parse error). @@ -379,8 +375,7 @@ // The task might delete ScriptStreamer, so it's not safe to do anything // after posting it. Note that there's no way to guarantee that this // function has returned before the task is ran - however, we should not - // access the "this" object after posting the task. (Especially, we should - // not be holding the mutex at this point.) + // access the "this" object after posting the task. } void ScriptStreamer::cancel() { @@ -396,7 +391,7 @@ } void ScriptStreamer::suppressStreaming() { - MutexLocker locker(m_mutex); + DCHECK(isMainThread()); DCHECK(!m_loadingFinished); // It can be that the parsing task has already finished (e.g., if there was // a parse error). @@ -406,11 +401,8 @@ void ScriptStreamer::notifyAppendData(ScriptResource* resource) { DCHECK(isMainThread()); CHECK_EQ(m_resource, resource); - { - MutexLocker locker(m_mutex); - if (m_streamingSuppressed) - return; - } + if (m_streamingSuppressed) + return; if (!m_haveEnoughDataForStreaming) { // Even if the first data chunk is small, the script can still be big // enough - wait until the next data chunk comes before deciding whether @@ -553,6 +545,7 @@ // The background task is completed; do the necessary ramp-down in the main // thread. DCHECK(isMainThread()); + m_parsingFinished = true; // It's possible that the corresponding Resource was deleted before V8 // finished streaming. In that case, the data or the notification is not @@ -574,10 +567,7 @@ // time to catch up. But the other way is possible too: if V8 detects a // parse error, the V8 side can complete before loading has finished. Send // the notification after both loading and V8 side operations have - // completed. Here we also check that we have a client: it can happen that a - // function calling notifyFinishedToClient was already scheduled in the task - // queue and the upper layer decided that it's not interested in the script - // and called removeClient. + // completed. if (!isFinished()) return;
diff --git a/third_party/WebKit/Source/bindings/core/v8/ScriptStreamer.h b/third_party/WebKit/Source/bindings/core/v8/ScriptStreamer.h index d9e6638..f688520 100644 --- a/third_party/WebKit/Source/bindings/core/v8/ScriptStreamer.h +++ b/third_party/WebKit/Source/bindings/core/v8/ScriptStreamer.h
@@ -141,14 +141,12 @@ SourceStream* m_stream; std::unique_ptr<v8::ScriptCompiler::StreamedSource> m_source; bool m_loadingFinished; // Whether loading from the network is done. - // Whether the V8 side processing is done. Will be used by the main thread - // and the streamer thread; guarded by m_mutex. - bool m_parsingFinished; + bool m_parsingFinished; // Whether the V8 side processing is done. // Whether we have received enough data to start the streaming. bool m_haveEnoughDataForStreaming; // Whether the script source code should be retrieved from the Resource - // instead of the ScriptStreamer; guarded by m_mutex. + // instead of the ScriptStreamer. bool m_streamingSuppressed; // What kind of cached data V8 produces during streaming. @@ -165,8 +163,6 @@ // Keep the script resource dentifier for event tracing. const unsigned long m_scriptResourceIdentifier; - mutable Mutex m_mutex; - // Encoding of the streamed script. Saved for sanity checking purposes. v8::ScriptCompiler::StreamedSource::Encoding m_encoding;
diff --git a/third_party/WebKit/Source/bindings/scripts/idl_compiler.py b/third_party/WebKit/Source/bindings/scripts/idl_compiler.py index 444415c..7c9728d29 100755 --- a/third_party/WebKit/Source/bindings/scripts/idl_compiler.py +++ b/third_party/WebKit/Source/bindings/scripts/idl_compiler.py
@@ -55,6 +55,8 @@ help='cache directory, defaults to output directory') parser.add_option('--generate-impl', action="store_true", default=False) + parser.add_option('--read-idl-list-from-file', + action="store_true", default=False) parser.add_option('--output-directory') parser.add_option('--impl-output-directory') parser.add_option('--info-dir') @@ -181,14 +183,18 @@ options, input_filename = parse_options() info_provider = create_component_info_provider( options.info_dir, options.target_component) - if options.generate_impl: - if not info_provider.interfaces_info: - raise Exception('Interfaces info is required to generate ' - 'union types containers') + if options.generate_impl or options.read_idl_list_from_file: # |input_filename| should be a file which contains a list of IDL # dictionary paths. input_filenames = read_idl_files_list_from_file(input_filename, is_gyp_format=True) + else: + input_filenames = [input_filename] + + if options.generate_impl: + if not info_provider.interfaces_info: + raise Exception('Interfaces info is required to generate ' + 'impl classes') generate_dictionary_impl(CodeGeneratorDictionaryImpl, info_provider, options, input_filenames) generate_union_type_containers(CodeGeneratorUnionType, info_provider, @@ -196,9 +202,8 @@ generate_callback_function_impl(CodeGeneratorCallbackFunction, info_provider, options) else: - # |input_filename| should be a path of an IDL file. generate_bindings(CodeGeneratorV8, info_provider, options, - [input_filename]) + input_filenames) if __name__ == '__main__':
diff --git a/third_party/WebKit/Source/bindings/scripts/scripts.gni b/third_party/WebKit/Source/bindings/scripts/scripts.gni index ab82c54..fc7b26c 100644 --- a/third_party/WebKit/Source/bindings/scripts/scripts.gni +++ b/third_party/WebKit/Source/bindings/scripts/scripts.gni
@@ -142,65 +142,106 @@ output_dir = invoker.output_dir output_name_suffix = invoker.output_name_suffix - action_foreach(target_name) { - # TODO(brettw) GYP adds a "-S before the script name to skip "import site" to - # speed up startup. Figure out if we need this and do something similar (not - # really expressible in GN now). - script = "//third_party/WebKit/Source/bindings/scripts/idl_compiler.py" + # TODO(brettw): we used to add a "-S" before the script name to skip + # "import site" to speed up startup. Figure out if we need this and do + # something similar (not really expressible in GN now). + _script = "//third_party/WebKit/Source/bindings/scripts/idl_compiler.py" + _inputs = idl_lexer_parser_files + idl_compiler_files # to be explicit (covered by parsetab) + _inputs += [ + "$bindings_scripts_output_dir/lextab.py", + "$bindings_scripts_output_dir/parsetab.pickle", + "$bindings_scripts_output_dir/cached_jinja_templates.stamp", + "$bindings_dir/IDLExtendedAttributes.txt", - inputs = idl_lexer_parser_files + idl_compiler_files # to be explicit (covered by parsetab) - inputs += [ - "$bindings_scripts_output_dir/lextab.py", - "$bindings_scripts_output_dir/parsetab.pickle", - "$bindings_scripts_output_dir/cached_jinja_templates.stamp", - "$bindings_dir/IDLExtendedAttributes.txt", + # If the dependency structure or public interface info (e.g., + # [ImplementedAs]) changes, we rebuild all files, since we're not + # computing dependencies file-by-file in the build. + # This data is generally stable. + "$bindings_modules_output_dir/InterfacesInfoOverall.pickle", + ] - # If the dependency structure or public interface info (e.g., - # [ImplementedAs]) changes, we rebuild all files, since we're not - # computing dependencies file-by-file in the build. - # This data is generally stable. - "$bindings_modules_output_dir/InterfacesInfoOverall.pickle", - ] + # Further, if any dependency (partial interface or implemented + # interface) changes, rebuild everything, since every IDL potentially + # depends on them, because we're not computing dependencies + # file-by-file. + # FIXME: This is too conservative, and causes excess rebuilds: + # compute this file-by-file. http://crbug.com/341748 + # This should theoretically just be the IDL files passed in. + _inputs += core_all_dependency_idl_files + modules_all_dependency_idl_files - # Further, if any dependency (partial interface or implemented - # interface) changes, rebuild everything, since every IDL potentially - # depends on them, because we're not computing dependencies - # file-by-file. - # FIXME: This is too conservative, and causes excess rebuilds: - # compute this file-by-file. http://crbug.com/341748 - # This should theoretically just be the IDL files passed in. - inputs += core_all_dependency_idl_files + modules_all_dependency_idl_files + _public_deps = [ + "//third_party/WebKit/Source/bindings/core:core_global_constructors_idls", - sources = invoker.sources - outputs = [ - "$output_dir/V8{{source_name_part}}${output_name_suffix}.cpp", - "$output_dir/V8{{source_name_part}}${output_name_suffix}.h", - ] + # FIXME: should be interfaces_info_core (w/o modules) + # http://crbug.com/358074 + "//third_party/WebKit/Source/bindings/modules:interfaces_info", + "//third_party/WebKit/Source/bindings/modules:modules_core_global_constructors_idls", + "//third_party/WebKit/Source/bindings/modules:modules_global_constructors_idls", + "//third_party/WebKit/Source/bindings/scripts:cached_jinja_templates", + "//third_party/WebKit/Source/bindings/scripts:cached_lex_yacc_tables", + "//third_party/WebKit/Source/core:generated_testing_idls", + ] - args = [ - "--cache-dir", - rebase_path(bindings_scripts_output_dir, root_build_dir), - "--output-dir", - rebase_path(output_dir, root_build_dir), - "--info-dir", - rebase_path("$bindings_output_dir", root_build_dir), - "--target-component", - invoker.target_component, - "{{source}}", - ] + # On mac spawning a python process per IDL file is slow. Use a single action + # instead. + # TODO(bashi,tikuta): Use a pool when crbug.com/635308 is fixed. + if (is_mac) { + action(target_name) { + script = _script + inputs = _inputs + public_deps = _public_deps - public_deps = [ - "//third_party/WebKit/Source/bindings/core:core_global_constructors_idls", + sources = invoker.sources + outputs = [] + foreach(_source, sources) { + _name_part = get_path_info(_source, "name") + outputs += [ + "$output_dir/V8${_name_part}${output_name_suffix}.cpp", + "$output_dir/V8${_name_part}${output_name_suffix}.h", + ] + } - # FIXME: should be interfaces_info_core (w/o modules) - # http://crbug.com/358074 - "//third_party/WebKit/Source/bindings/modules:interfaces_info", - "//third_party/WebKit/Source/bindings/modules:modules_core_global_constructors_idls", - "//third_party/WebKit/Source/bindings/modules:modules_global_constructors_idls", - "//third_party/WebKit/Source/bindings/scripts:cached_jinja_templates", - "//third_party/WebKit/Source/bindings/scripts:cached_lex_yacc_tables", - "//third_party/WebKit/Source/core:generated_testing_idls", - ] + idl_files_list = "$target_gen_dir/${target_name}_file_list.tmp" + write_file(idl_files_list, rebase_path(invoker.sources, root_build_dir)) + inputs += [ idl_files_list ] + + args = [ + "--cache-dir", + rebase_path(bindings_scripts_output_dir, root_build_dir), + "--output-dir", + rebase_path(output_dir, root_build_dir), + "--info-dir", + rebase_path("$bindings_output_dir", root_build_dir), + "--target-component", + invoker.target_component, + "--read-idl-list-from-file", + rebase_path(idl_files_list, root_build_dir), + ] + } + } else { + action_foreach(target_name) { + script = _script + inputs = _inputs + public_deps = _public_deps + + sources = invoker.sources + outputs = [ + "$output_dir/V8{{source_name_part}}${output_name_suffix}.cpp", + "$output_dir/V8{{source_name_part}}${output_name_suffix}.h", + ] + + args = [ + "--cache-dir", + rebase_path(bindings_scripts_output_dir, root_build_dir), + "--output-dir", + rebase_path(output_dir, root_build_dir), + "--info-dir", + rebase_path("$bindings_output_dir", root_build_dir), + "--target-component", + invoker.target_component, + "{{source}}", + ] + } } }
diff --git a/third_party/WebKit/Source/core/layout/ColumnBalancer.h b/third_party/WebKit/Source/core/layout/ColumnBalancer.h index a963e5a0..b130086 100644 --- a/third_party/WebKit/Source/core/layout/ColumnBalancer.h +++ b/third_party/WebKit/Source/core/layout/ColumnBalancer.h
@@ -2,6 +2,9 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#ifndef ColumnBalancer_h +#define ColumnBalancer_h + #include "core/layout/LayoutMultiColumnSet.h" namespace blink { @@ -270,3 +273,5 @@ }; } // namespace blink + +#endif // ColumnBalancer_h
diff --git a/third_party/WebKit/Source/core/layout/FloatingObjects.cpp b/third_party/WebKit/Source/core/layout/FloatingObjects.cpp index ba37e28..f48b31f 100644 --- a/third_party/WebKit/Source/core/layout/FloatingObjects.cpp +++ b/third_party/WebKit/Source/core/layout/FloatingObjects.cpp
@@ -33,8 +33,6 @@ #include <algorithm> #include <memory> -using namespace WTF; - namespace blink { struct SameSizeAsFloatingObject {
diff --git a/third_party/WebKit/Source/core/layout/LayoutBox.cpp b/third_party/WebKit/Source/core/layout/LayoutBox.cpp index b5a5cd9..58c5960 100644 --- a/third_party/WebKit/Source/core/layout/LayoutBox.cpp +++ b/third_party/WebKit/Source/core/layout/LayoutBox.cpp
@@ -190,7 +190,7 @@ // The background of the root element or the body element could propagate up // to the canvas. Just dirty the entire canvas when our style changes // substantially. - if ((diff.needsPaintInvalidation() || diff.needsLayout()) && node() && + if ((diff.needsFullPaintInvalidation() || diff.needsLayout()) && node() && (isHTMLHtmlElement(*node()) || isHTMLBodyElement(*node()))) { view()->setShouldDoFullPaintInvalidation(); @@ -283,7 +283,7 @@ } // Our opaqueness might have changed without triggering layout. - if (diff.needsPaintInvalidation()) { + if (diff.needsFullPaintInvalidation()) { LayoutObject* parentToInvalidate = parent(); for (unsigned i = 0; i < backgroundObscurationTestMaxDepth && parentToInvalidate; ++i) {
diff --git a/third_party/WebKit/Source/core/layout/LayoutFieldset.cpp b/third_party/WebKit/Source/core/layout/LayoutFieldset.cpp index 087b0fc..c33a839 100644 --- a/third_party/WebKit/Source/core/layout/LayoutFieldset.cpp +++ b/third_party/WebKit/Source/core/layout/LayoutFieldset.cpp
@@ -28,8 +28,6 @@ #include "core/html/HTMLLegendElement.h" #include "core/paint/FieldsetPainter.h" -using namespace std; - namespace blink { using namespace HTMLNames;
diff --git a/third_party/WebKit/Source/core/layout/LayoutGrid.cpp b/third_party/WebKit/Source/core/layout/LayoutGrid.cpp index 554dd56..ec39e7a 100644 --- a/third_party/WebKit/Source/core/layout/LayoutGrid.cpp +++ b/third_party/WebKit/Source/core/layout/LayoutGrid.cpp
@@ -53,11 +53,6 @@ LayoutUnit distributionOffset = LayoutUnit(-1); }; -enum TrackSizeRestriction { - AllowInfinity, - ForbidInfinity, -}; - LayoutGrid::LayoutGrid(Element* element) : LayoutBlock(element), m_grid(this), m_trackSizingAlgorithm(this, m_grid) { ASSERT(!childrenInline());
diff --git a/third_party/WebKit/Source/core/layout/LayoutObject.cpp b/third_party/WebKit/Source/core/layout/LayoutObject.cpp index 94daf66..6a2b51a6 100644 --- a/third_party/WebKit/Source/core/layout/LayoutObject.cpp +++ b/third_party/WebKit/Source/core/layout/LayoutObject.cpp
@@ -1529,7 +1529,8 @@ // Optimization: for decoration/color property changes, invalidation is only // needed if we have style or text affected by these properties. - if (diff.textDecorationOrColorChanged() && !diff.needsPaintInvalidation()) { + if (diff.textDecorationOrColorChanged() && + !diff.needsFullPaintInvalidation()) { if (style()->hasBorder() || style()->hasOutline() || style()->hasBackgroundRelatedColorReferencingCurrentColor() || // Skip any text nodes that do not contain text boxes. Whitespace cannot @@ -1585,7 +1586,8 @@ const ComputedStyle& newStyle) { StyleDifference diff = oldStyle.visualInvalidationDiff(newStyle); - if (diff.needsPaintInvalidation() || diff.textDecorationOrColorChanged()) { + if (diff.needsFullPaintInvalidation() || + diff.textDecorationOrColorChanged()) { // We need to invalidate all inline boxes in the first line, because they // need to be repainted with the new style, e.g. background, font style, // etc. @@ -1924,7 +1926,7 @@ } } - if (diff.needsPaintInvalidation() && oldStyle) { + if (diff.needsFullPaintInvalidation() && oldStyle) { if (resolveColor(*oldStyle, CSSPropertyBackgroundColor) != resolveColor(CSSPropertyBackgroundColor) || oldStyle->backgroundLayers() != styleRef().backgroundLayers())
diff --git a/third_party/WebKit/Source/core/layout/LayoutScrollbarPart.cpp b/third_party/WebKit/Source/core/layout/LayoutScrollbarPart.cpp index 765bf915..67ad4dc2a 100644 --- a/third_party/WebKit/Source/core/layout/LayoutScrollbarPart.cpp +++ b/third_party/WebKit/Source/core/layout/LayoutScrollbarPart.cpp
@@ -211,7 +211,7 @@ setInline(false); clearPositionedState(); setFloating(false); - if (oldStyle && (diff.needsPaintInvalidation() || diff.needsLayout())) + if (oldStyle && (diff.needsFullPaintInvalidation() || diff.needsLayout())) setNeedsPaintInvalidation(); }
diff --git a/third_party/WebKit/Source/core/layout/LayoutSlider.cpp b/third_party/WebKit/Source/core/layout/LayoutSlider.cpp index a5fe043..34f19534 100644 --- a/third_party/WebKit/Source/core/layout/LayoutSlider.cpp +++ b/third_party/WebKit/Source/core/layout/LayoutSlider.cpp
@@ -27,8 +27,6 @@ #include "core/layout/LayoutSliderThumb.h" #include "wtf/MathExtras.h" -using namespace ::std; - namespace blink { const int LayoutSlider::defaultTrackLength = 129;
diff --git a/third_party/WebKit/Source/core/layout/LayoutText.cpp b/third_party/WebKit/Source/core/layout/LayoutText.cpp index 045f337..14174575 100644 --- a/third_party/WebKit/Source/core/layout/LayoutText.cpp +++ b/third_party/WebKit/Source/core/layout/LayoutText.cpp
@@ -54,9 +54,6 @@ #include "wtf/text/StringBuffer.h" #include "wtf/text/StringBuilder.h" -using namespace WTF; -using namespace Unicode; - namespace blink { struct SameSizeAsLayoutText : public LayoutObject { @@ -139,10 +136,12 @@ int32_t startOfWord = boundary->first(); for (endOfWord = boundary->next(); endOfWord != TextBreakDone; startOfWord = endOfWord, endOfWord = boundary->next()) { - if (startOfWord) // Ignore first char of previous string - result.append(input[startOfWord - 1] == noBreakSpaceCharacter - ? noBreakSpaceCharacter - : toTitleCase(stringWithPrevious[startOfWord])); + if (startOfWord) { // Ignore first char of previous string + result.append( + input[startOfWord - 1] == noBreakSpaceCharacter + ? noBreakSpaceCharacter + : WTF::Unicode::toTitleCase(stringWithPrevious[startOfWord])); + } for (int i = startOfWord + 1; i < endOfWord; i++) result.append(input[i - 1]); }
diff --git a/third_party/WebKit/Source/core/layout/svg/LayoutSVGRoot.cpp b/third_party/WebKit/Source/core/layout/svg/LayoutSVGRoot.cpp index d1d8068..e3d0528a 100644 --- a/third_party/WebKit/Source/core/layout/svg/LayoutSVGRoot.cpp +++ b/third_party/WebKit/Source/core/layout/svg/LayoutSVGRoot.cpp
@@ -248,7 +248,7 @@ const ComputedStyle* oldStyle) { if (diff.needsFullLayout()) setNeedsBoundariesUpdate(); - if (diff.needsPaintInvalidation()) { + if (diff.needsFullPaintInvalidation()) { // Box decorations may have appeared/disappeared - recompute status. m_hasBoxDecorationBackground = styleRef().hasBoxDecorationBackground(); }
diff --git a/third_party/WebKit/Source/core/style/ComputedStyle.cpp b/third_party/WebKit/Source/core/style/ComputedStyle.cpp index 2b3f00a..ad198f6 100644 --- a/third_party/WebKit/Source/core/style/ComputedStyle.cpp +++ b/third_party/WebKit/Source/core/style/ComputedStyle.cpp
@@ -547,7 +547,7 @@ if (m_svgStyle.get() != other.m_svgStyle.get()) diff = m_svgStyle->diff(other.m_svgStyle.get()); - if ((!diff.needsFullLayout() || !diff.needsPaintInvalidation()) && + if ((!diff.needsFullLayout() || !diff.needsFullPaintInvalidation()) && diffNeedsFullLayoutAndPaintInvalidation(other)) { diff.setNeedsFullLayout(); diff.setNeedsPaintInvalidationObject(); @@ -1077,7 +1077,7 @@ if (!m_surround->border.visualOverflowEqual(other.m_surround->border)) diff.setNeedsRecomputeOverflow(); - if (!diff.needsPaintInvalidation()) { + if (!diff.needsFullPaintInvalidation()) { if (m_styleInheritedData->color != other.m_styleInheritedData->color || m_styleInheritedData->visitedLinkColor != other.m_styleInheritedData->visitedLinkColor ||
diff --git a/third_party/WebKit/Source/core/style/StyleDifference.h b/third_party/WebKit/Source/core/style/StyleDifference.h index a646e54..1c622066 100644 --- a/third_party/WebKit/Source/core/style/StyleDifference.h +++ b/third_party/WebKit/Source/core/style/StyleDifference.h
@@ -51,17 +51,17 @@ !(m_propertySpecificDifferences & ~propertyDifferences); } - bool needsPaintInvalidation() const { - return m_paintInvalidationType != NoPaintInvalidation; + bool needsFullPaintInvalidation() const { + return m_paintInvalidationType > PaintInvalidationSelectionOnly; } // The text selection needs paint invalidation. bool needsPaintInvalidationSelection() const { - return m_paintInvalidationType == PaintInvalidationSelection; + return m_paintInvalidationType == PaintInvalidationSelectionOnly; } void setNeedsPaintInvalidationSelection() { - if (!needsPaintInvalidation()) - m_paintInvalidationType = PaintInvalidationSelection; + if (!needsFullPaintInvalidation()) + m_paintInvalidationType = PaintInvalidationSelectionOnly; } // The object just needs to issue paint invalidations. @@ -150,7 +150,7 @@ private: enum PaintInvalidationType { NoPaintInvalidation, - PaintInvalidationSelection, + PaintInvalidationSelectionOnly, PaintInvalidationObject, PaintInvalidationSubtree, };
diff --git a/tools/android/eclipse/.classpath b/tools/android/eclipse/.classpath index 5577636..12e7522a 100644 --- a/tools/android/eclipse/.classpath +++ b/tools/android/eclipse/.classpath
@@ -144,6 +144,7 @@ <classpathentry kind="src" path="out/Debug/gen/enums/browsing_data_utils_java"/> <classpathentry kind="src" path="out/Debug/gen/enums/certificate_mime_types_java"/> <classpathentry kind="src" path="out/Debug/gen/enums/cert_verify_status_android_java"/> + <classpathentry kind="src" path="out/Debug/gen/enums/clear_browsing_data_tab_java"/> <classpathentry kind="src" path="out/Debug/gen/enums/chromium_url_request_java"/> <classpathentry kind="src" path="out/Debug/gen/enums/connectivity_check_result_java"/> <classpathentry kind="src" path="out/Debug/gen/enums/console_message_level_java"/>