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 7e0d304a0ace749f9382e3fa59cdf060e416894e..d53349a0ac796b6503047aec4921b0be22129883 100644 |
--- a/chrome/browser/chrome_content_browser_client.cc |
+++ b/chrome/browser/chrome_content_browser_client.cc |
@@ -1808,18 +1808,30 @@ bool ChromeContentBrowserClient::AllowServiceWorker( |
#endif |
ProfileIOData* io_data = ProfileIOData::FromResourceContext(context); |
- bool allow = io_data->GetCookieSettings()->IsSettingCookieAllowed( |
- scope, first_party_url); |
+ // Check if JavaScript is allowed. |
+ content_settings::SettingInfo info; |
+ std::unique_ptr<base::Value> value = |
+ io_data->GetHostContentSettingsMap()->GetWebsiteSetting( |
+ first_party_url, first_party_url, CONTENT_SETTINGS_TYPE_JAVASCRIPT, |
+ std::string(), &info); |
+ ContentSetting setting = content_settings::ValueToContentSetting(value.get()); |
+ bool allow_javascript = (setting == CONTENT_SETTING_ALLOW); |
+ |
+ // Check if cookies are allowed. |
+ bool allow_serviceworker = |
+ io_data->GetCookieSettings()->IsSettingCookieAllowed(scope, |
+ first_party_url); |
// Record access to database for potential display in UI. |
// Only post the task if this is for a specific frame. |
if (render_process_id != -1 && render_frame_id != -1) { |
BrowserThread::PostTask( |
BrowserThread::UI, FROM_HERE, |
base::Bind(&TabSpecificContentSettings::ServiceWorkerAccessed, |
- render_process_id, render_frame_id, scope, !allow)); |
+ render_process_id, render_frame_id, scope, |
+ !allow_javascript, !allow_serviceworker)); |
} |
- return allow; |
+ return allow_javascript && allow_serviceworker; |
} |
bool ChromeContentBrowserClient::AllowGetCookie( |