Index: chrome/browser/chrome_content_browser_client.cc |
diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc |
index ff8dd621b5b04a52568a2a918acd10c40f64d33c..4a5d119645d11acecb66e8d79e397bd7367546fa 100644 |
--- a/chrome/browser/chrome_content_browser_client.cc |
+++ b/chrome/browser/chrome_content_browser_client.cc |
@@ -648,7 +648,8 @@ float GetDeviceScaleAdjustment() { |
namespace chrome { |
ChromeContentBrowserClient::ChromeContentBrowserClient() |
- : prerender_tracker_(NULL) { |
+ : prerender_tracker_(NULL), |
+ weak_factory_(this) { |
#if defined(ENABLE_PLUGINS) |
for (size_t i = 0; i < arraysize(kPredefinedAllowedDevChannelOrigins); ++i) |
allowed_dev_channel_origins_.insert(kPredefinedAllowedDevChannelOrigins[i]); |
@@ -1818,25 +1819,63 @@ bool ChromeContentBrowserClient::AllowWorkerDatabase( |
return allow; |
} |
-bool ChromeContentBrowserClient::AllowWorkerFileSystem( |
+void ChromeContentBrowserClient::AllowWorkerFileSystem( |
const GURL& url, |
content::ResourceContext* context, |
- const std::vector<std::pair<int, int> >& render_frames) { |
+ const std::vector<std::pair<int, int> >& render_frames, |
+ base::Callback<void(bool)> callback) { |
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
ProfileIOData* io_data = ProfileIOData::FromResourceContext(context); |
CookieSettings* cookie_settings = io_data->GetCookieSettings(); |
bool allow = cookie_settings->IsSettingCookieAllowed(url, url); |
+#if defined(ENABLE_EXTENSIONS) |
+ // Record access to file system for potential display in UI. |
+ std::vector<std::pair<int, int> >::const_iterator i; |
+ for (i = render_frames.begin(); i != render_frames.end(); ++i) { |
Xi Han
2014/07/03 15:02:51
With this implementation, we will guaranty the cal
|
+ bool is_web_view_guest = |
+ WebViewRendererState::GetInstance()->IsGuest(i->first); |
+ if (is_web_view_guest) { |
+ BrowserThread::PostTask( |
+ BrowserThread::UI, |
+ FROM_HERE, |
+ base::Bind(&WebViewGuest::RequestFileSystemAccessPermission, |
Fady Samuel
2014/07/08 14:42:46
RequestFileSystemPermissionFromIOThread
Xi Han
2014/07/08 21:28:24
I declare a static function in ChromeContentBrowse
|
+ i->first, |
+ i->second, |
+ url, |
+ !allow, |
+ base::Bind(&ChromeContentBrowserClient::FileSystemAccessed, |
+ weak_factory_.GetWeakPtr(), |
+ url, |
+ render_frames, |
+ callback))); |
+ break; |
+ } |
+ } |
+#else |
+ FileSystemAccessed(url, render_frames, callback, allow); |
+#endif |
+ |
+} |
+ |
+void ChromeContentBrowserClient::FileSystemAccessed( |
+ const GURL& url, |
+ const std::vector<std::pair<int, int> >& render_frames, |
+ base::Callback<void(bool)> callback, |
+ bool allow) { |
// Record access to file system for potential display in UI. |
std::vector<std::pair<int, int> >::const_iterator i; |
for (i = render_frames.begin(); i != render_frames.end(); ++i) { |
BrowserThread::PostTask( |
- BrowserThread::UI, FROM_HERE, |
+ BrowserThread::UI, |
+ FROM_HERE, |
base::Bind(&TabSpecificContentSettings::FileSystemAccessed, |
- i->first, i->second, url, !allow)); |
+ i->first, |
+ i->second, |
+ url, |
+ !allow)); |
} |
- |
- return allow; |
+ callback.Run(allow); |
} |
bool ChromeContentBrowserClient::AllowWorkerIndexedDB( |