Author:
mk...@chromium.org
Date: Tue Jun 12 05:02:43 2012
New Revision: 141646
Log:
Adding "Clear hosted app data" checkbox to browsing data removal UI.
Original patch from
bat...@chromium.org, I'm just sheparding it along as he's
out on vacation.
BUG=116372
TBR=
rsi...@chromium.org,
tims...@chromium.org
TEST=Install a hosted application, then clear browsing data with the new checkbox checked: the hosted application's data should be cleared. Without the checkbox, the data should remain untouched.
Review URL:
https://chromiumcodereview.appspot.com/10502015
Modified:
trunk/src/chrome/app/generated_resources.grd
trunk/src/chrome/browser/resources/options2/clear_browser_data_overlay.html
trunk/src/chrome/browser/resources/options2/clear_browser_data_overlay.js
trunk/src/chrome/browser/sync/test/integration/two_client_preferences_sync_test.cc
trunk/src/chrome/browser/ui/browser.cc
trunk/src/chrome/browser/ui/webui/options2/clear_browser_data_handler2.cc
trunk/src/chrome/browser/ui/webui/options2/clear_browser_data_handler2.h
trunk/src/chrome/common/pref_names.cc
trunk/src/chrome/common/pref_names.h
Modified: trunk/src/chrome/app/generated_resources.grd
==============================================================================
--- trunk/src/chrome/app/generated_resources.grd (original)
+++ trunk/src/chrome/app/generated_resources.grd Tue Jun 12 05:02:43 2012
@@ -6665,6 +6665,9 @@
<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>
Modified: trunk/src/chrome/browser/resources/options2/clear_browser_data_overlay.html
==============================================================================
--- trunk/src/chrome/browser/resources/options2/clear_browser_data_overlay.html (original)
+++ trunk/src/chrome/browser/resources/options2/clear_browser_data_overlay.html Tue Jun 12 05:02:43 2012
@@ -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"
Modified: trunk/src/chrome/browser/resources/options2/clear_browser_data_overlay.js
==============================================================================
--- trunk/src/chrome/browser/resources/options2/clear_browser_data_overlay.js (original)
+++ trunk/src/chrome/browser/resources/options2/clear_browser_data_overlay.js Tue Jun 12 05:02:43 2012
@@ -36,6 +36,7 @@
'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 @@
ClearBrowserDataOverlay.dismiss();
};
$('clearBrowserDataCommit').onclick = function(event) {
+ ClearBrowserDataOverlay.setClearingState(true);
chrome.send('performClearBrowserData');
};
},
@@ -81,9 +83,11 @@
$('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;
Modified: trunk/src/chrome/browser/sync/test/integration/two_client_preferences_sync_test.cc
==============================================================================
--- trunk/src/chrome/browser/sync/test/integration/two_client_preferences_sync_test.cc (original)
+++ trunk/src/chrome/browser/sync/test/integration/two_client_preferences_sync_test.cc Tue Jun 12 05:02:43 2012
@@ -322,6 +322,7 @@
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 @@
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 @@
ASSERT_TRUE(BooleanPrefMatches(prefs::kDeleteCookies));
ASSERT_TRUE(BooleanPrefMatches(prefs::kDeletePasswords));
ASSERT_TRUE(BooleanPrefMatches(prefs::kDeleteFormData));
+ ASSERT_TRUE(BooleanPrefMatches(prefs::kDeleteHostedAppsData));
}
// TCM ID - 3686300.
Modified: trunk/src/chrome/browser/ui/browser.cc
==============================================================================
--- trunk/src/chrome/browser/ui/browser.cc (original)
+++ trunk/src/chrome/browser/ui/browser.cc Tue Jun 12 05:02:43 2012
@@ -2133,6 +2133,9 @@
prefs->RegisterBooleanPref(prefs::kDeleteFormData,
false,
PrefService::SYNCABLE_PREF);
+ prefs->RegisterBooleanPref(prefs::kDeleteHostedAppsData,
+ false,
+ PrefService::SYNCABLE_PREF);
prefs->RegisterIntegerPref(prefs::kDeleteTimePeriod,
0,
PrefService::SYNCABLE_PREF);
Modified: trunk/src/chrome/browser/ui/webui/options2/clear_browser_data_handler2.cc
==============================================================================
--- trunk/src/chrome/browser/ui/webui/options2/clear_browser_data_handler2.cc (original)
+++ trunk/src/chrome/browser/ui/webui/options2/clear_browser_data_handler2.cc Tue Jun 12 05:02:43 2012
@@ -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 @@
{ "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::HandleClearBrowserData(const ListValue* value) {
+ DCHECK(!remover_);
+
Profile* profile = Profile::FromWebUI(web_ui());
PrefService* prefs = profile->GetPrefs();
@@ -121,29 +126,59 @@
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);
- base::FundamentalValue state(true);
- web_ui()->CallJavascriptFunction("ClearBrowserDataOverlay.setClearingState",
- state);
+ 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);
+ }
+}
- // If we are still observing a previous data remover, we need to stop
- // observing.
- if (remover_)
- remover_->RemoveObserver(this);
+void ClearBrowserDataHandler::ClearHostedAppData() {
+ DCHECK(!remover_);
+ DCHECK(remove_hosted_app_data_pending_);
+ 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");
}
Modified: trunk/src/chrome/browser/ui/webui/options2/clear_browser_data_handler2.h
==============================================================================
--- trunk/src/chrome/browser/ui/webui/options2/clear_browser_data_handler2.h (original)
+++ trunk/src/chrome/browser/ui/webui/options2/clear_browser_data_handler2.h Tue Jun 12 05:02:43 2012
@@ -30,9 +30,17 @@
// 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 @@
// 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);
};
Modified: trunk/src/chrome/common/pref_names.cc
==============================================================================
--- trunk/src/chrome/common/pref_names.cc (original)
+++ trunk/src/chrome/common/pref_names.cc Tue Jun 12 05:02:43 2012
@@ -721,6 +721,7 @@
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";
Modified: trunk/src/chrome/common/pref_names.h
==============================================================================
--- trunk/src/chrome/common/pref_names.h (original)
+++ trunk/src/chrome/common/pref_names.h Tue Jun 12 05:02:43 2012
@@ -273,6 +273,7 @@
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[];