Index: chrome/browser/content_settings/tab_specific_content_settings.cc |
diff --git a/chrome/browser/content_settings/tab_specific_content_settings.cc b/chrome/browser/content_settings/tab_specific_content_settings.cc |
index 7de878d869c2641d030433ad7d6ecdbf54ad37f5..a6349f3af946509de0e8f4deb74b93c427bc206a 100644 |
--- a/chrome/browser/content_settings/tab_specific_content_settings.cc |
+++ b/chrome/browser/content_settings/tab_specific_content_settings.cc |
@@ -39,6 +39,7 @@ |
using content::BrowserThread; |
using content::NavigationController; |
using content::NavigationEntry; |
+using content::RenderFrameHost; |
using content::RenderViewHost; |
using content::WebContents; |
@@ -205,10 +206,11 @@ void TabSpecificContentSettings::IndexedDBAccessed( |
} |
// static |
-void TabSpecificContentSettings::FileSystemAccessed(int render_process_id, |
- int render_frame_id, |
- const GURL& url, |
- bool blocked_by_policy) { |
+void TabSpecificContentSettings::FileSystemAccessedSync( |
+ int render_process_id, |
+ int render_frame_id, |
+ const GURL& url, |
+ bool blocked_by_policy) { |
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
TabSpecificContentSettings* settings = GetForFrame( |
render_process_id, render_frame_id); |
@@ -216,6 +218,94 @@ void TabSpecificContentSettings::FileSystemAccessed(int render_process_id, |
settings->OnFileSystemAccessed(url, blocked_by_policy); |
} |
+// static |
+void TabSpecificContentSettings::FileSystemAccessedSyncDelayReply( |
+ int render_process_id, |
+ int render_frame_id, |
+ const GURL& url, |
+ IPC::Message* reply_msg, |
+ bool blocked_by_policy) { |
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
+ content::RenderFrameHost* render_frame_host = |
+ content::RenderFrameHost::FromID(render_process_id, render_frame_id); |
+ WebViewGuest* guest = GetWebViewGuest(render_frame_host); |
+ DCHECK(guest); |
+ guest->RequestFileSystemPermission( |
+ url, |
+ base::Bind(&TabSpecificContentSettings:: |
+ UpdateSettingsOnFileSystemAccessedDelayReply, |
+ render_process_id, |
+ render_frame_id, |
+ url, |
+ reply_msg)); |
+} |
+ |
+// static |
+void TabSpecificContentSettings::FileSystemAccessedAsync( |
+ int render_process_id, |
+ int render_frame_id, |
+ int request_id, |
+ const GURL& url, |
+ bool blocked_by_policy) { |
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
+ content::RenderFrameHost* render_frame_host = |
+ content::RenderFrameHost::FromID(render_process_id, render_frame_id); |
+ WebViewGuest* guest = GetWebViewGuest(render_frame_host); |
+ if (guest) { |
+ guest->RequestFileSystemPermission( |
+ url, |
+ base::Bind(&TabSpecificContentSettings::FileSystemAccessedAsyncInternal, |
+ render_process_id, |
+ render_frame_id, |
+ request_id, |
+ url)); |
+ } else { |
+ FileSystemAccessedAsyncInternal( |
+ render_process_id, render_frame_id, request_id, url, blocked_by_policy); |
+ } |
+} |
+ |
+// static |
+WebViewGuest* TabSpecificContentSettings::GetWebViewGuest( |
+ content::RenderFrameHost* render_frame_host) { |
+ WebContents* web_contents = |
+ WebContents::FromRenderFrameHost(render_frame_host); |
+ return WebViewGuest::FromWebContents(web_contents); |
+} |
+ |
+// static |
+void TabSpecificContentSettings::FileSystemAccessedAsyncInternal( |
+ int render_process_id, |
+ int render_frame_id, |
+ int request_id, |
+ const GURL& url, |
+ bool blocked_by_policy) { |
+ FileSystemAccessedSync( |
+ render_process_id, render_frame_id, url, blocked_by_policy); |
+ content::RenderFrameHost* render_frame_host = |
+ content::RenderFrameHost::FromID(render_process_id, render_frame_id); |
+ render_frame_host->Send( |
+ new ChromeViewMsg_RequestFileSystemAccessAsyncResponse( |
+ render_frame_id, request_id, !blocked_by_policy)); |
+} |
+ |
+// static |
+void TabSpecificContentSettings::UpdateSettingsOnFileSystemAccessedDelayReply( |
+ int render_process_id, |
+ int render_frame_id, |
+ const GURL& url, |
+ IPC::Message* reply_msg, |
+ bool blocked_by_policy) { |
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
+ FileSystemAccessedSync( |
+ render_process_id, render_frame_id, url, blocked_by_policy); |
+ ChromeViewHostMsg_RequestFileSystemAccessSync::WriteReplyParams( |
+ reply_msg, !blocked_by_policy); |
+ content::RenderFrameHost* render_frame_host = |
+ content::RenderFrameHost::FromID(render_process_id, render_frame_id); |
+ render_frame_host->Send(reply_msg); |
+} |
+ |
bool TabSpecificContentSettings::IsContentBlocked( |
ContentSettingsType content_type) const { |
DCHECK(content_type != CONTENT_SETTINGS_TYPE_GEOLOCATION) |