Chromium Code Reviews| 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..632a42342bb57625ffc0e824beed253bbdd79ce4 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; |
| @@ -216,6 +217,111 @@ 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); |
| + if (guest) { |
| + guest->RequestFileSystemPermission( |
| + url, |
| + base::Bind(&TabSpecificContentSettings:: |
| + UpdateSettingsOnFileSystemAccessedDelayReply, |
| + render_process_id, |
| + render_frame_id, |
| + url, |
| + reply_msg)); |
| + } else { |
| + FileSystemAccessed( |
| + render_process_id, render_frame_id, url, blocked_by_policy); |
| + } |
| +} |
| + |
| +// 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) { |
| + FileSystemAccessed( |
| + render_process_id, render_frame_id, url, blocked_by_policy); |
| + SendMessage( |
|
Fady Samuel
2014/05/29 19:04:32
This appears to be only called once. This doesn't
Xi Han
2014/05/29 21:10:21
Done.
|
| + render_process_id, render_frame_id, request_id, url, 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)); |
| + FileSystemAccessed( |
| + 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); |
| +} |
| + |
| +// static |
| +void TabSpecificContentSettings::SendMessage(int render_process_id, |
| + int render_frame_id, |
| + int request_id, |
| + const GURL& url, |
| + bool 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)); |
| +} |
| + |
| bool TabSpecificContentSettings::IsContentBlocked( |
| ContentSettingsType content_type) const { |
| DCHECK(content_type != CONTENT_SETTINGS_TYPE_GEOLOCATION) |