Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(63)

Side by Side Diff: extensions/renderer/dispatcher.cc

Issue 1328313002: Disable the extension service worker checks that are crashing the renderer. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: disable some tests as well Created 5 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "extensions/renderer/dispatcher.h" 5 #include "extensions/renderer/dispatcher.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/callback.h" 8 #include "base/callback.h"
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/containers/scoped_ptr_map.h" 10 #include "base/containers/scoped_ptr_map.h"
(...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after
192 } 192 }
193 }; 193 };
194 194
195 class ServiceWorkerScriptContextSet { 195 class ServiceWorkerScriptContextSet {
196 public: 196 public:
197 ServiceWorkerScriptContextSet() {} 197 ServiceWorkerScriptContextSet() {}
198 ~ServiceWorkerScriptContextSet() {} 198 ~ServiceWorkerScriptContextSet() {}
199 199
200 void Insert(const GURL& url, scoped_ptr<ScriptContext> context) { 200 void Insert(const GURL& url, scoped_ptr<ScriptContext> context) {
201 base::AutoLock lock(lock_); 201 base::AutoLock lock(lock_);
202 CHECK(script_contexts_.find(url) == script_contexts_.end()); 202 scoped_ptr<ScriptContext> existing = script_contexts_.take_and_erase(url);
203 // This should be CHECK(!existing), but can't until these ScriptContexts
204 // are keyed on v8::Contexts rather than URLs. See crbug.com/525965.
205 if (existing)
206 existing->Invalidate();
203 script_contexts_.set(url, context.Pass()); 207 script_contexts_.set(url, context.Pass());
204 } 208 }
205 209
206 void Remove(const GURL& url) { 210 void Remove(const GURL& url) {
207 base::AutoLock lock(lock_); 211 base::AutoLock lock(lock_);
208 scoped_ptr<ScriptContext> context = script_contexts_.take_and_erase(url); 212 scoped_ptr<ScriptContext> context = script_contexts_.take_and_erase(url);
209 CHECK(context); 213 CHECK(context);
210 context->Invalidate(); 214 context->Invalidate();
211 } 215 }
212 216
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after
351 355
352 VLOG(1) << "Num tracked contexts: " << script_context_set_->size(); 356 VLOG(1) << "Num tracked contexts: " << script_context_set_->size();
353 } 357 }
354 358
355 // static 359 // static
356 void Dispatcher::DidInitializeServiceWorkerContextOnWorkerThread( 360 void Dispatcher::DidInitializeServiceWorkerContextOnWorkerThread(
357 v8::Local<v8::Context> v8_context, 361 v8::Local<v8::Context> v8_context,
358 const GURL& url) { 362 const GURL& url) {
359 const base::TimeTicks start_time = base::TimeTicks::Now(); 363 const base::TimeTicks start_time = base::TimeTicks::Now();
360 364
365 if (!url.SchemeIs(kExtensionScheme) &&
366 !url.SchemeIs(kExtensionResourceScheme)) {
367 // Early-out if this isn't a chrome-extension:// or resource scheme,
368 // because looking up the extension registry is unnecessary if it's not.
369 // Checking this will also skip over hosted apps, which is the desired
370 // behavior - hosted app service workers are not our concern.
371 return;
372 }
373
361 const Extension* extension = 374 const Extension* extension =
362 RendererExtensionRegistry::Get()->GetExtensionOrAppByURL(url); 375 RendererExtensionRegistry::Get()->GetExtensionOrAppByURL(url);
363 376
364 if (!extension) 377 if (!extension)
365 return; 378 return;
366 379
367 ScriptContext* context = new ScriptContext( 380 ScriptContext* context = new ScriptContext(
368 v8_context, nullptr, extension, Feature::SERVICE_WORKER_CONTEXT, 381 v8_context, nullptr, extension, Feature::SERVICE_WORKER_CONTEXT,
369 extension, Feature::SERVICE_WORKER_CONTEXT); 382 extension, Feature::SERVICE_WORKER_CONTEXT);
370 383
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
410 // In fact |request_sender_| should really be owned by ScriptContext. 423 // In fact |request_sender_| should really be owned by ScriptContext.
411 request_sender_->InvalidateSource(context); 424 request_sender_->InvalidateSource(context);
412 425
413 script_context_set_->Remove(context); 426 script_context_set_->Remove(context);
414 VLOG(1) << "Num tracked contexts: " << script_context_set_->size(); 427 VLOG(1) << "Num tracked contexts: " << script_context_set_->size();
415 } 428 }
416 429
417 // static 430 // static
418 void Dispatcher::WillDestroyServiceWorkerContextOnWorkerThread( 431 void Dispatcher::WillDestroyServiceWorkerContextOnWorkerThread(
419 const GURL& url) { 432 const GURL& url) {
420 if (RendererExtensionRegistry::Get()->GetExtensionOrAppByURL(url)) 433 if (url.SchemeIs(kExtensionScheme) ||
434 url.SchemeIs(kExtensionResourceScheme)) {
435 // See comment in DidInitializeServiceWorkerContextOnWorkerThread.
421 g_service_worker_script_context_set.Get().Remove(url); 436 g_service_worker_script_context_set.Get().Remove(url);
437 }
422 } 438 }
423 439
424 void Dispatcher::DidCreateDocumentElement(blink::WebLocalFrame* frame) { 440 void Dispatcher::DidCreateDocumentElement(blink::WebLocalFrame* frame) {
425 // Note: use GetEffectiveDocumentURL not just frame->document()->url() 441 // Note: use GetEffectiveDocumentURL not just frame->document()->url()
426 // so that this also injects the stylesheet on about:blank frames that 442 // so that this also injects the stylesheet on about:blank frames that
427 // are hosted in the extension process. 443 // are hosted in the extension process.
428 GURL effective_document_url = ScriptContext::GetEffectiveDocumentURL( 444 GURL effective_document_url = ScriptContext::GetEffectiveDocumentURL(
429 frame, frame->document().url(), true /* match_about_blank */); 445 frame, frame->document().url(), true /* match_about_blank */);
430 446
431 const Extension* extension = 447 const Extension* extension =
(...skipping 1137 matching lines...) Expand 10 before | Expand all | Expand 10 after
1569 void Dispatcher::AddChannelSpecificFeatures() { 1585 void Dispatcher::AddChannelSpecificFeatures() {
1570 // chrome-extension: resources should be allowed to register a Service Worker. 1586 // chrome-extension: resources should be allowed to register a Service Worker.
1571 if (FeatureProvider::GetBehaviorFeature(BehaviorFeature::kServiceWorker) 1587 if (FeatureProvider::GetBehaviorFeature(BehaviorFeature::kServiceWorker)
1572 ->IsAvailableToEnvironment() 1588 ->IsAvailableToEnvironment()
1573 .is_available()) 1589 .is_available())
1574 WebSecurityPolicy::registerURLSchemeAsAllowingServiceWorkers( 1590 WebSecurityPolicy::registerURLSchemeAsAllowingServiceWorkers(
1575 WebString::fromUTF8(kExtensionScheme)); 1591 WebString::fromUTF8(kExtensionScheme));
1576 } 1592 }
1577 1593
1578 } // namespace extensions 1594 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698