summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--chrome/app/generated_resources.grd3
-rw-r--r--chrome/browser/resources/options2/clear_browser_data_overlay.html7
-rw-r--r--chrome/browser/resources/options2/clear_browser_data_overlay.js4
-rw-r--r--chrome/browser/sync/test/integration/two_client_preferences_sync_test.cc3
-rw-r--r--chrome/browser/ui/browser.cc3
-rw-r--r--chrome/browser/ui/webui/options2/clear_browser_data_handler2.cc57
-rw-r--r--chrome/browser/ui/webui/options2/clear_browser_data_handler2.h14
-rw-r--r--chrome/common/pref_names.cc1
-rw-r--r--chrome/common/pref_names.h1
9 files changed, 81 insertions, 12 deletions
diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources.grd
index 965dbda..7eb7761 100644
--- a/chrome/app/generated_resources.grd
+++ b/chrome/app/generated_resources.grd
@@ -6665,6 +6665,9 @@ The following plug-in is unresponsive: <ph name="PLUGIN_NAME">$1
<message name="IDS_DEL_FORM_DATA_CHKBOX" desc="Checkbox for deleting form data saved for Autofill">
Clear saved Autofill form data
</message>
+ <message name="IDS_DEL_HOSTED_APPS_DATA_CHKBOX" desc="Checkbox for deleting data of hosted apps">
+ Clear data from hosted apps
+ </message>
<message name="IDS_DEAUTHORIZE_CONTENT_LICENSES_CHKBOX" desc="Checkbox for deauthorizing content licenses (DRM videos, etc.)">
Deauthorize content licenses
</message>
diff --git a/chrome/browser/resources/options2/clear_browser_data_overlay.html b/chrome/browser/resources/options2/clear_browser_data_overlay.html
index bbad513..d3e7a52 100644
--- a/chrome/browser/resources/options2/clear_browser_data_overlay.html
+++ b/chrome/browser/resources/options2/clear_browser_data_overlay.html
@@ -54,6 +54,13 @@
<span i18n-content="deleteFormDataCheckbox"></span>
</label>
</div>
+ <div class="checkbox">
+ <label>
+ <input id="deleteHostedAppsDataCheckbox"
+ pref="browser.clear_data.hosted_apps_data" type="checkbox">
+ <span i18n-content="deleteHostedAppsDataCheckbox"></span>
+ </label>
+ </div>
<div class="checkbox pepper-flash-settings">
<label>
<input id="deauthorizeContentLicensesCheckbox"
diff --git a/chrome/browser/resources/options2/clear_browser_data_overlay.js b/chrome/browser/resources/options2/clear_browser_data_overlay.js
index 50b3baf..72be1dd 100644
--- a/chrome/browser/resources/options2/clear_browser_data_overlay.js
+++ b/chrome/browser/resources/options2/clear_browser_data_overlay.js
@@ -36,6 +36,7 @@ cr.define('options', function() {
'browser.clear_data.cookies',
'browser.clear_data.passwords',
'browser.clear_data.form_data',
+ 'browser.clear_data.hosted_apps_data',
'browser.clear_data.content_licenses'];
types.forEach(function(type) {
Preferences.getInstance().addEventListener(type, f);
@@ -52,6 +53,7 @@ cr.define('options', function() {
ClearBrowserDataOverlay.dismiss();
};
$('clearBrowserDataCommit').onclick = function(event) {
+ ClearBrowserDataOverlay.setClearingState(true);
chrome.send('performClearBrowserData');
};
},
@@ -81,9 +83,11 @@ cr.define('options', function() {
$('deleteCookiesCheckbox').disabled = state;
$('deletePasswordsCheckbox').disabled = state;
$('deleteFormDataCheckbox').disabled = state;
+ $('deleteHostedAppsDataCheckbox').disabled = state;
$('deauthorizeContentLicensesCheckbox').disabled = state;
$('clearBrowserDataTimePeriod').disabled = state;
$('cbdThrobber').style.visibility = state ? 'visible' : 'hidden';
+ $('clearBrowserDataDismiss').disabled = state;
if (state)
$('clearBrowserDataCommit').disabled = true;
diff --git a/chrome/browser/sync/test/integration/two_client_preferences_sync_test.cc b/chrome/browser/sync/test/integration/two_client_preferences_sync_test.cc
index 4ac1a9d..6c72862 100644
--- a/chrome/browser/sync/test/integration/two_client_preferences_sync_test.cc
+++ b/chrome/browser/sync/test/integration/two_client_preferences_sync_test.cc
@@ -322,6 +322,7 @@ IN_PROC_BROWSER_TEST_F(TwoClientPreferencesSyncTest, ClearData) {
ASSERT_TRUE(BooleanPrefMatches(prefs::kDeleteCookies));
ASSERT_TRUE(BooleanPrefMatches(prefs::kDeletePasswords));
ASSERT_TRUE(BooleanPrefMatches(prefs::kDeleteFormData));
+ ASSERT_TRUE(BooleanPrefMatches(prefs::kDeleteHostedAppsData));
ChangeBooleanPref(0, prefs::kDeleteBrowsingHistory);
ChangeBooleanPref(0, prefs::kDeleteDownloadHistory);
@@ -329,6 +330,7 @@ IN_PROC_BROWSER_TEST_F(TwoClientPreferencesSyncTest, ClearData) {
ChangeBooleanPref(0, prefs::kDeleteCookies);
ChangeBooleanPref(0, prefs::kDeletePasswords);
ChangeBooleanPref(0, prefs::kDeleteFormData);
+ ChangeBooleanPref(0, prefs::kDeleteHostedAppsData);
ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
ASSERT_TRUE(BooleanPrefMatches(
prefs::kDeleteBrowsingHistory));
@@ -338,6 +340,7 @@ IN_PROC_BROWSER_TEST_F(TwoClientPreferencesSyncTest, ClearData) {
ASSERT_TRUE(BooleanPrefMatches(prefs::kDeleteCookies));
ASSERT_TRUE(BooleanPrefMatches(prefs::kDeletePasswords));
ASSERT_TRUE(BooleanPrefMatches(prefs::kDeleteFormData));
+ ASSERT_TRUE(BooleanPrefMatches(prefs::kDeleteHostedAppsData));
}
// TCM ID - 3686300.
diff --git a/chrome/browser/ui/browser.cc b/chrome/browser/ui/browser.cc
index 9154d11..dfdd730 100644
--- a/chrome/browser/ui/browser.cc
+++ b/chrome/browser/ui/browser.cc
@@ -2133,6 +2133,9 @@ void Browser::RegisterUserPrefs(PrefService* prefs) {
prefs->RegisterBooleanPref(prefs::kDeleteFormData,
false,
PrefService::SYNCABLE_PREF);
+ prefs->RegisterBooleanPref(prefs::kDeleteHostedAppsData,
+ false,
+ PrefService::SYNCABLE_PREF);
prefs->RegisterIntegerPref(prefs::kDeleteTimePeriod,
0,
PrefService::SYNCABLE_PREF);
diff --git a/chrome/browser/ui/webui/options2/clear_browser_data_handler2.cc b/chrome/browser/ui/webui/options2/clear_browser_data_handler2.cc
index 620b567..9ba13e3 100644
--- a/chrome/browser/ui/webui/options2/clear_browser_data_handler2.cc
+++ b/chrome/browser/ui/webui/options2/clear_browser_data_handler2.cc
@@ -24,7 +24,9 @@
namespace options2 {
-ClearBrowserDataHandler::ClearBrowserDataHandler() : remover_(NULL) {
+ClearBrowserDataHandler::ClearBrowserDataHandler()
+ : remover_(NULL),
+ remove_hosted_app_data_pending_(false) {
}
ClearBrowserDataHandler::~ClearBrowserDataHandler() {
@@ -51,6 +53,7 @@ void ClearBrowserDataHandler::GetLocalizedValues(
{ "deleteCookiesFlashCheckbox", IDS_DEL_COOKIES_FLASH_CHKBOX },
{ "deletePasswordsCheckbox", IDS_DEL_PASSWORDS_CHKBOX },
{ "deleteFormDataCheckbox", IDS_DEL_FORM_DATA_CHKBOX },
+ { "deleteHostedAppsDataCheckbox", IDS_DEL_HOSTED_APPS_DATA_CHKBOX },
{ "deauthorizeContentLicensesCheckbox",
IDS_DEAUTHORIZE_CONTENT_LICENSES_CHKBOX },
{ "clearBrowserDataCommit", IDS_CLEAR_BROWSING_DATA_COMMIT },
@@ -97,6 +100,8 @@ void ClearBrowserDataHandler::RegisterMessages() {
}
void ClearBrowserDataHandler::HandleClearBrowserData(const ListValue* value) {
+ DCHECK(!remover_);
+
Profile* profile = Profile::FromWebUI(web_ui());
PrefService* prefs = profile->GetPrefs();
@@ -121,29 +126,59 @@ void ClearBrowserDataHandler::HandleClearBrowserData(const ListValue* value) {
if (prefs->GetBoolean(prefs::kDeauthorizeContentLicenses))
remove_mask |= BrowsingDataRemover::REMOVE_CONTENT_LICENSES;
- int period_selected = prefs->GetInteger(prefs::kDeleteTimePeriod);
+ remove_hosted_app_data_pending_ =
+ prefs->GetBoolean(prefs::kDeleteHostedAppsData);
+
+ if (!remove_mask) {
+ // If no unprotected data should be removed, skip straight to removing
+ // hosted app data. If nothing should be removed (which would mean that the
+ // JS-side is buggy), skip straight to cleaning up.
+ if (remove_hosted_app_data_pending_)
+ ClearHostedAppData();
+ else
+ OnAllDataRemoved();
+ } else {
+ // BrowsingDataRemover deletes itself when done.
+ int period_selected = prefs->GetInteger(prefs::kDeleteTimePeriod);
+ remover_ = new BrowsingDataRemover(profile,
+ static_cast<BrowsingDataRemover::TimePeriod>(period_selected),
+ base::Time());
+ remover_->AddObserver(this);
+ remover_->Remove(remove_mask, BrowsingDataHelper::UNPROTECTED_WEB);
+ }
+}
- base::FundamentalValue state(true);
- web_ui()->CallJavascriptFunction("ClearBrowserDataOverlay.setClearingState",
- state);
+void ClearBrowserDataHandler::ClearHostedAppData() {
+ DCHECK(!remover_);
+ DCHECK(remove_hosted_app_data_pending_);
- // If we are still observing a previous data remover, we need to stop
- // observing.
- if (remover_)
- remover_->RemoveObserver(this);
+ remove_hosted_app_data_pending_ = false;
+ Profile* profile = Profile::FromWebUI(web_ui());
+ PrefService* prefs = profile->GetPrefs();
+ int period_selected = prefs->GetInteger(prefs::kDeleteTimePeriod);
// BrowsingDataRemover deletes itself when done.
- remover_ = new BrowsingDataRemover(profile,
+ remover_ = new BrowsingDataRemover(
+ profile,
static_cast<BrowsingDataRemover::TimePeriod>(period_selected),
base::Time());
remover_->AddObserver(this);
- remover_->Remove(remove_mask, BrowsingDataHelper::UNPROTECTED_WEB);
+ remover_->Remove(BrowsingDataRemover::REMOVE_SITE_DATA,
+ BrowsingDataHelper::PROTECTED_WEB);
}
void ClearBrowserDataHandler::OnBrowsingDataRemoverDone() {
// No need to remove ourselves as an observer as BrowsingDataRemover deletes
// itself after we return.
remover_ = NULL;
+
+ if (remove_hosted_app_data_pending_)
+ ClearHostedAppData();
+ else
+ OnAllDataRemoved();
+}
+
+void ClearBrowserDataHandler::OnAllDataRemoved() {
web_ui()->CallJavascriptFunction("ClearBrowserDataOverlay.doneClearing");
}
diff --git a/chrome/browser/ui/webui/options2/clear_browser_data_handler2.h b/chrome/browser/ui/webui/options2/clear_browser_data_handler2.h
index 9e54812..bd232c2 100644
--- a/chrome/browser/ui/webui/options2/clear_browser_data_handler2.h
+++ b/chrome/browser/ui/webui/options2/clear_browser_data_handler2.h
@@ -30,9 +30,17 @@ class ClearBrowserDataHandler : public OptionsPageUIHandler,
// Javascript callback to start clearing data.
void HandleClearBrowserData(const ListValue* value);
- // Callback from BrowsingDataRemover. Closes the dialog.
+ // Callback from BrowsingDataRemover. Calls OnAllDataRemoved once both
+ // protected and unprotected data are removed.
virtual void OnBrowsingDataRemoverDone() OVERRIDE;
+ // Closes the dialog once all requested data has been removed.
+ void OnAllDataRemoved();
+
+ // Clears the data of hosted apps, which is otherwise protected from deletion
+ // when the user clears regular browsing data.
+ void ClearHostedAppData();
+
// If non-null it means removal is in progress. BrowsingDataRemover takes care
// of deleting itself when done.
BrowsingDataRemover* remover_;
@@ -40,6 +48,10 @@ class ClearBrowserDataHandler : public OptionsPageUIHandler,
// Keeps track of whether clearing LSO data is supported.
BooleanPrefMember clear_plugin_lso_data_enabled_;
+ // Indicates that we also need to delete hosted app data after finishing the
+ // first removal operation.
+ bool remove_hosted_app_data_pending_;
+
DISALLOW_COPY_AND_ASSIGN(ClearBrowserDataHandler);
};
diff --git a/chrome/common/pref_names.cc b/chrome/common/pref_names.cc
index f6dd8a8..32a2837 100644
--- a/chrome/common/pref_names.cc
+++ b/chrome/common/pref_names.cc
@@ -721,6 +721,7 @@ const char kDeleteCache[] = "browser.clear_data.cache";
const char kDeleteCookies[] = "browser.clear_data.cookies";
const char kDeletePasswords[] = "browser.clear_data.passwords";
const char kDeleteFormData[] = "browser.clear_data.form_data";
+const char kDeleteHostedAppsData[] = "browser.clear_data.hosted_apps_data";
const char kDeauthorizeContentLicenses[] =
"browser.clear_data.content_licenses";
const char kDeleteTimePeriod[] = "browser.clear_data.time_period";
diff --git a/chrome/common/pref_names.h b/chrome/common/pref_names.h
index 16343be..fd10825 100644
--- a/chrome/common/pref_names.h
+++ b/chrome/common/pref_names.h
@@ -273,6 +273,7 @@ extern const char kDeleteCache[];
extern const char kDeleteCookies[];
extern const char kDeletePasswords[];
extern const char kDeleteFormData[];
+extern const char kDeleteHostedAppsData[];
extern const char kDeauthorizeContentLicenses[];
extern const char kEnableSpellCheck[];
extern const char kSpeechInputTrayNotificationShown[];