Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(414)

Unified Diff: extensions/browser/guest_view/web_view/web_view_guest.cc

Issue 1021073002: <webview> Implement clear http cache API. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix compile error on mac/android: std::set initializer list makes them unhappy Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: extensions/browser/guest_view/web_view/web_view_guest.cc
diff --git a/extensions/browser/guest_view/web_view/web_view_guest.cc b/extensions/browser/guest_view/web_view/web_view_guest.cc
index 701d08034dfd6b71ee97ecaf162cdd82933b3e0e..9ed24fff867795a48af4dcc90fc3a834cd0bffb1 100644
--- a/extensions/browser/guest_view/web_view/web_view_guest.cc
+++ b/extensions/browser/guest_view/web_view/web_view_guest.cc
@@ -53,12 +53,33 @@
using base::UserMetricsAction;
using content::RenderFrameHost;
using content::ResourceType;
+using content::StoragePartition;
using content::WebContents;
namespace extensions {
namespace {
+// Returns storage partition removal mask from web_view clearData mask. Note
+// that storage partition mask is a subset of webview's data removal mask.
+uint32 GetStoragePartitionRemovalMask(uint32 web_view_removal_mask) {
+ uint32 mask = 0;
+ if (web_view_removal_mask & webview::WEB_VIEW_REMOVE_DATA_MASK_APPCACHE)
+ mask |= StoragePartition::REMOVE_DATA_MASK_APPCACHE;
+ if (web_view_removal_mask & webview::WEB_VIEW_REMOVE_DATA_MASK_COOKIES)
+ mask |= StoragePartition::REMOVE_DATA_MASK_COOKIES;
+ if (web_view_removal_mask & webview::WEB_VIEW_REMOVE_DATA_MASK_FILE_SYSTEMS)
+ mask |= StoragePartition::REMOVE_DATA_MASK_FILE_SYSTEMS;
+ if (web_view_removal_mask & webview::WEB_VIEW_REMOVE_DATA_MASK_INDEXEDDB)
+ mask |= StoragePartition::REMOVE_DATA_MASK_INDEXEDDB;
+ if (web_view_removal_mask & webview::WEB_VIEW_REMOVE_DATA_MASK_LOCAL_STORAGE)
+ mask |= StoragePartition::REMOVE_DATA_MASK_LOCAL_STORAGE;
+ if (web_view_removal_mask & webview::WEB_VIEW_REMOVE_DATA_MASK_WEBSQL)
+ mask |= StoragePartition::REMOVE_DATA_MASK_WEBSQL;
+
+ return mask;
+}
+
std::string WindowOpenDispositionToString(
WindowOpenDisposition window_open_disposition) {
switch (window_open_disposition) {
@@ -315,6 +336,26 @@ void WebViewGuest::AttachWebViewHelpers(WebContents* contents) {
web_view_permission_helper_.reset(new WebViewPermissionHelper(this));
}
+void WebViewGuest::ClearDataInternal(base::Time remove_since,
+ uint32 removal_mask,
+ const base::Closure& callback) {
+ uint32 storage_partition_removal_mask =
+ GetStoragePartitionRemovalMask(removal_mask);
+ if (!storage_partition_removal_mask) {
+ callback.Run();
+ return;
+ }
+ content::StoragePartition* partition =
+ content::BrowserContext::GetStoragePartition(
+ web_contents()->GetBrowserContext(),
+ web_contents()->GetSiteInstance());
+ partition->ClearData(
+ storage_partition_removal_mask,
+ content::StoragePartition::QUOTA_MANAGED_STORAGE_MASK_ALL, GURL(),
+ content::StoragePartition::OriginMatcherFunction(), remove_since,
+ base::Time::Now(), callback);
+}
+
void WebViewGuest::GuestViewDidStopLoading() {
scoped_ptr<base::DictionaryValue> args(new base::DictionaryValue());
DispatchEventToView(
@@ -616,7 +657,7 @@ void WebViewGuest::Terminate() {
content::RESULT_CODE_KILLED, false);
}
-bool WebViewGuest::ClearData(const base::Time remove_since,
+bool WebViewGuest::ClearData(base::Time remove_since,
uint32 removal_mask,
const base::Closure& callback) {
content::RecordAction(UserMetricsAction("WebView.Guest.ClearData"));
@@ -628,14 +669,19 @@ bool WebViewGuest::ClearData(const base::Time remove_since,
if (!partition)
return false;
- partition->ClearData(
- removal_mask,
- content::StoragePartition::QUOTA_MANAGED_STORAGE_MASK_ALL,
- GURL(),
- content::StoragePartition::OriginMatcherFunction(),
- remove_since,
- base::Time::Now(),
- callback);
+ if (removal_mask & webview::WEB_VIEW_REMOVE_DATA_MASK_CACHE) {
+ if (web_view_guest_delegate_) {
+ // First clear http cache data and then clear the rest in
+ // |ClearDataInternal|.
+ web_view_guest_delegate_->ClearCache(
+ remove_since, base::Bind(&WebViewGuest::ClearDataInternal,
+ weak_ptr_factory_.GetWeakPtr(), remove_since,
+ removal_mask, callback));
+ return true;
+ }
+ }
+
+ ClearDataInternal(remove_since, removal_mask, callback);
return true;
}

Powered by Google App Engine
This is Rietveld 408576698