| 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)
|
|
|