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

Side by Side Diff: chrome/browser/devtools/devtools_ui_bindings.cc

Issue 2620153002: Fix front-end host creation upon navigation (Closed)
Patch Set: Created 3 years, 11 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 "chrome/browser/devtools/devtools_ui_bindings.h" 5 #include "chrome/browser/devtools/devtools_ui_bindings.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <memory> 9 #include <memory>
10 #include <utility> 10 #include <utility>
(...skipping 453 matching lines...) Expand 10 before | Expand all | Expand 10 after
464 DevToolsUIBindings::FrontendWebContentsObserver:: 464 DevToolsUIBindings::FrontendWebContentsObserver::
465 ~FrontendWebContentsObserver() { 465 ~FrontendWebContentsObserver() {
466 } 466 }
467 467
468 // static 468 // static
469 GURL DevToolsUIBindings::SanitizeFrontendURL(const GURL& url) { 469 GURL DevToolsUIBindings::SanitizeFrontendURL(const GURL& url) {
470 return ::SanitizeFrontendURL(url, content::kChromeDevToolsScheme, 470 return ::SanitizeFrontendURL(url, content::kChromeDevToolsScheme,
471 chrome::kChromeUIDevToolsHost, SanitizeFrontendPath(url.path()), true); 471 chrome::kChromeUIDevToolsHost, SanitizeFrontendPath(url.path()), true);
472 } 472 }
473 473
474 bool DevToolsUIBindings::IsValidFrontendURL(const GURL& url) {
475 return SanitizeFrontendURL(url).spec() == url.spec();
476 }
477
474 void DevToolsUIBindings::FrontendWebContentsObserver::RenderProcessGone( 478 void DevToolsUIBindings::FrontendWebContentsObserver::RenderProcessGone(
475 base::TerminationStatus status) { 479 base::TerminationStatus status) {
476 bool crashed = true; 480 bool crashed = true;
477 switch (status) { 481 switch (status) {
478 case base::TERMINATION_STATUS_ABNORMAL_TERMINATION: 482 case base::TERMINATION_STATUS_ABNORMAL_TERMINATION:
479 case base::TERMINATION_STATUS_PROCESS_WAS_KILLED: 483 case base::TERMINATION_STATUS_PROCESS_WAS_KILLED:
480 #if defined(OS_CHROMEOS) 484 #if defined(OS_CHROMEOS)
481 case base::TERMINATION_STATUS_PROCESS_WAS_KILLED_BY_OOM: 485 case base::TERMINATION_STATUS_PROCESS_WAS_KILLED_BY_OOM:
482 #endif 486 #endif
483 case base::TERMINATION_STATUS_PROCESS_CRASHED: 487 case base::TERMINATION_STATUS_PROCESS_CRASHED:
484 case base::TERMINATION_STATUS_LAUNCH_FAILED: 488 case base::TERMINATION_STATUS_LAUNCH_FAILED:
485 if (devtools_bindings_->agent_host_.get()) 489 if (devtools_bindings_->agent_host_.get())
486 devtools_bindings_->Detach(); 490 devtools_bindings_->Detach();
487 break; 491 break;
488 default: 492 default:
489 crashed = false; 493 crashed = false;
490 break; 494 break;
491 } 495 }
492 devtools_bindings_->delegate_->RenderProcessGone(crashed); 496 devtools_bindings_->delegate_->RenderProcessGone(crashed);
493 } 497 }
494 498
495 void DevToolsUIBindings::FrontendWebContentsObserver:: 499 void DevToolsUIBindings::FrontendWebContentsObserver::
496 DidStartNavigationToPendingEntry(const GURL& url, 500 DidStartNavigationToPendingEntry(const GURL& url,
497 content::ReloadType reload_type) { 501 content::ReloadType reload_type) {
498 devtools_bindings_->UpdateFrontendHost(); 502 devtools_bindings_->UpdateFrontendHost(url);
499 } 503 }
500 504
501 void DevToolsUIBindings::FrontendWebContentsObserver:: 505 void DevToolsUIBindings::FrontendWebContentsObserver::
502 DocumentAvailableInMainFrame() { 506 DocumentAvailableInMainFrame() {
503 devtools_bindings_->DocumentAvailableInMainFrame(); 507 devtools_bindings_->DocumentAvailableInMainFrame();
504 } 508 }
505 509
506 void DevToolsUIBindings::FrontendWebContentsObserver:: 510 void DevToolsUIBindings::FrontendWebContentsObserver::
507 DocumentOnLoadCompletedInMainFrame() { 511 DocumentOnLoadCompletedInMainFrame() {
508 devtools_bindings_->DocumentOnLoadCompletedInMainFrame(); 512 devtools_bindings_->DocumentOnLoadCompletedInMainFrame();
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
543 web_contents_->GetMutableRendererPrefs()->can_accept_load_drops = false; 547 web_contents_->GetMutableRendererPrefs()->can_accept_load_drops = false;
544 548
545 file_helper_.reset(new DevToolsFileHelper(web_contents_, profile_, this)); 549 file_helper_.reset(new DevToolsFileHelper(web_contents_, profile_, this));
546 file_system_indexer_ = new DevToolsFileSystemIndexer(); 550 file_system_indexer_ = new DevToolsFileSystemIndexer();
547 extensions::ChromeExtensionWebContentsObserver::CreateForWebContents( 551 extensions::ChromeExtensionWebContentsObserver::CreateForWebContents(
548 web_contents_); 552 web_contents_);
549 553
550 // Register on-load actions. 554 // Register on-load actions.
551 embedder_message_dispatcher_.reset( 555 embedder_message_dispatcher_.reset(
552 DevToolsEmbedderMessageDispatcher::CreateForDevToolsFrontend(this)); 556 DevToolsEmbedderMessageDispatcher::CreateForDevToolsFrontend(this));
553 UpdateFrontendHost(); 557 UpdateFrontendHost(web_contents_->GetVisibleURL());
pfeldman 2017/01/10 22:31:51 I don't think you need this call - navigation shou
554 } 558 }
555 559
556 DevToolsUIBindings::~DevToolsUIBindings() { 560 DevToolsUIBindings::~DevToolsUIBindings() {
557 for (const auto& pair : pending_requests_) 561 for (const auto& pair : pending_requests_)
558 delete pair.first; 562 delete pair.first;
559 563
560 if (agent_host_.get()) 564 if (agent_host_.get())
561 agent_host_->DetachClient(this); 565 agent_host_->DetachClient(this);
562 566
563 for (IndexingJobsMap::const_iterator jobs_it(indexing_jobs_.begin()); 567 for (IndexingJobsMap::const_iterator jobs_it(indexing_jobs_.begin());
(...skipping 627 matching lines...) Expand 10 before | Expand all | Expand 10 after
1191 const InfoBarCallback& callback) { 1195 const InfoBarCallback& callback) {
1192 if (!delegate_->GetInfoBarService()) { 1196 if (!delegate_->GetInfoBarService()) {
1193 callback.Run(false); 1197 callback.Run(false);
1194 return; 1198 return;
1195 } 1199 }
1196 std::unique_ptr<DevToolsConfirmInfoBarDelegate> delegate( 1200 std::unique_ptr<DevToolsConfirmInfoBarDelegate> delegate(
1197 new DevToolsConfirmInfoBarDelegate(callback, message)); 1201 new DevToolsConfirmInfoBarDelegate(callback, message));
1198 GlobalConfirmInfoBar::Show(std::move(delegate)); 1202 GlobalConfirmInfoBar::Show(std::move(delegate));
1199 } 1203 }
1200 1204
1201 void DevToolsUIBindings::UpdateFrontendHost() { 1205 void DevToolsUIBindings::UpdateFrontendHost(const GURL& url) {
1202 GURL url = web_contents_->GetVisibleURL(); 1206 if (!IsValidFrontendURL(url)) {
1203 if (url.spec() != SanitizeFrontendURL(url).spec()) {
1204 LOG(ERROR) << "Attempt to navigate to an invalid DevTools front-end URL: " 1207 LOG(ERROR) << "Attempt to navigate to an invalid DevTools front-end URL: "
1205 << url.spec(); 1208 << url.spec();
1206 frontend_host_.reset(); 1209 frontend_host_.reset();
1207 return; 1210 return;
1208 } 1211 }
1209 frontend_host_.reset(content::DevToolsFrontendHost::Create( 1212 frontend_host_.reset(content::DevToolsFrontendHost::Create(
1210 web_contents_->GetMainFrame(), 1213 web_contents_,
1211 base::Bind(&DevToolsUIBindings::HandleMessageFromDevToolsFrontend, 1214 base::Bind(&DevToolsUIBindings::HandleMessageFromDevToolsFrontend,
1212 base::Unretained(this)))); 1215 base::Unretained(this))));
1213 } 1216 }
1214 1217
1215 void DevToolsUIBindings::AddDevToolsExtensionsToClient() { 1218 void DevToolsUIBindings::AddDevToolsExtensionsToClient() {
1216 const extensions::ExtensionRegistry* registry = 1219 const extensions::ExtensionRegistry* registry =
1217 extensions::ExtensionRegistry::Get(profile_->GetOriginalProfile()); 1220 extensions::ExtensionRegistry::Get(profile_->GetOriginalProfile());
1218 if (!registry) 1221 if (!registry)
1219 return; 1222 return;
1220 1223
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
1333 void DevToolsUIBindings::FrontendLoaded() { 1336 void DevToolsUIBindings::FrontendLoaded() {
1334 if (frontend_loaded_) 1337 if (frontend_loaded_)
1335 return; 1338 return;
1336 frontend_loaded_ = true; 1339 frontend_loaded_ = true;
1337 1340
1338 // Call delegate first - it seeds importants bit of information. 1341 // Call delegate first - it seeds importants bit of information.
1339 delegate_->OnLoadCompleted(); 1342 delegate_->OnLoadCompleted();
1340 1343
1341 AddDevToolsExtensionsToClient(); 1344 AddDevToolsExtensionsToClient();
1342 } 1345 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698