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

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

Issue 427143003: [DevTools] Move DevToolsClientHost functionality out of DevToolsFrontendHost. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 4 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 | Annotate | Revision Log
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 "base/command_line.h" 7 #include "base/command_line.h"
8 #include "base/json/json_reader.h" 8 #include "base/json/json_reader.h"
9 #include "base/json/json_writer.h" 9 #include "base/json/json_writer.h"
10 #include "base/strings/string_number_conversions.h" 10 #include "base/strings/string_number_conversions.h"
(...skipping 241 matching lines...) Expand 10 before | Expand all | Expand 10 after
252 DevToolsUIBindings::FrontendWebContentsObserver:: 252 DevToolsUIBindings::FrontendWebContentsObserver::
253 ~FrontendWebContentsObserver() { 253 ~FrontendWebContentsObserver() {
254 } 254 }
255 255
256 void DevToolsUIBindings::FrontendWebContentsObserver::WebContentsDestroyed() { 256 void DevToolsUIBindings::FrontendWebContentsObserver::WebContentsDestroyed() {
257 delete devtools_bindings_; 257 delete devtools_bindings_;
258 } 258 }
259 259
260 void DevToolsUIBindings::FrontendWebContentsObserver::RenderProcessGone( 260 void DevToolsUIBindings::FrontendWebContentsObserver::RenderProcessGone(
261 base::TerminationStatus status) { 261 base::TerminationStatus status) {
262 switch (status) {
263 case base::TERMINATION_STATUS_ABNORMAL_TERMINATION:
264 case base::TERMINATION_STATUS_PROCESS_WAS_KILLED:
265 case base::TERMINATION_STATUS_PROCESS_CRASHED:
266 content::DevToolsManager::GetInstance()->ClientHostClosing(
267 devtools_bindings_);
268 break;
269 default:
270 break;
271 }
262 devtools_bindings_->delegate_->RenderProcessGone(); 272 devtools_bindings_->delegate_->RenderProcessGone();
263 } 273 }
264 274
265 void DevToolsUIBindings::FrontendWebContentsObserver::AboutToNavigateRenderView( 275 void DevToolsUIBindings::FrontendWebContentsObserver::AboutToNavigateRenderView(
266 content::RenderViewHost* render_view_host) { 276 content::RenderViewHost* render_view_host) {
267 content::NavigationEntry* entry = 277 content::NavigationEntry* entry =
268 web_contents()->GetController().GetActiveEntry(); 278 web_contents()->GetController().GetActiveEntry();
269 if (devtools_bindings_->url_ == entry->GetURL()) 279 if (devtools_bindings_->url_ != entry->GetURL())
270 content::DevToolsClientHost::SetupDevToolsFrontendClient(render_view_host);
271 else
272 delete devtools_bindings_; 280 delete devtools_bindings_;
273 } 281 }
274 282
275 void DevToolsUIBindings::FrontendWebContentsObserver:: 283 void DevToolsUIBindings::FrontendWebContentsObserver::
276 DocumentOnLoadCompletedInMainFrame() { 284 DocumentOnLoadCompletedInMainFrame() {
277 devtools_bindings_->DocumentOnLoadCompletedInMainFrame(); 285 devtools_bindings_->DocumentOnLoadCompletedInMainFrame();
278 } 286 }
279 287
280 // DevToolsUIBindings --------------------------------------------------------- 288 // DevToolsUIBindings ---------------------------------------------------------
281 289
(...skipping 22 matching lines...) Expand all
304 : profile_(Profile::FromBrowserContext(web_contents->GetBrowserContext())), 312 : profile_(Profile::FromBrowserContext(web_contents->GetBrowserContext())),
305 web_contents_(web_contents), 313 web_contents_(web_contents),
306 delegate_(new DefaultBindingsDelegate(web_contents_)), 314 delegate_(new DefaultBindingsDelegate(web_contents_)),
307 device_count_updates_enabled_(false), 315 device_count_updates_enabled_(false),
308 devices_updates_enabled_(false), 316 devices_updates_enabled_(false),
309 url_(url), 317 url_(url),
310 weak_factory_(this) { 318 weak_factory_(this) {
311 frontend_contents_observer_.reset(new FrontendWebContentsObserver(this)); 319 frontend_contents_observer_.reset(new FrontendWebContentsObserver(this));
312 web_contents_->GetMutableRendererPrefs()->can_accept_load_drops = false; 320 web_contents_->GetMutableRendererPrefs()->can_accept_load_drops = false;
313 321
314 frontend_host_.reset(content::DevToolsClientHost::CreateDevToolsFrontendHost( 322 frontend_host_.reset(content::DevToolsFrontendHost::Create(
315 web_contents_, this)); 323 web_contents_, this));
316 file_helper_.reset(new DevToolsFileHelper(web_contents_, profile_)); 324 file_helper_.reset(new DevToolsFileHelper(web_contents_, profile_));
317 file_system_indexer_ = new DevToolsFileSystemIndexer(); 325 file_system_indexer_ = new DevToolsFileSystemIndexer();
318 extensions::ChromeExtensionWebContentsObserver::CreateForWebContents( 326 extensions::ChromeExtensionWebContentsObserver::CreateForWebContents(
319 web_contents_); 327 web_contents_);
320 328
321 web_contents_->GetController().LoadURL( 329 web_contents_->GetController().LoadURL(
322 url, content::Referrer(), 330 url, content::Referrer(),
323 content::PAGE_TRANSITION_AUTO_TOPLEVEL, std::string()); 331 content::PAGE_TRANSITION_AUTO_TOPLEVEL, std::string());
324 332
325 // Wipe out page icon so that the default application icon is used. 333 // Wipe out page icon so that the default application icon is used.
326 content::NavigationEntry* entry = 334 content::NavigationEntry* entry =
327 web_contents_->GetController().GetActiveEntry(); 335 web_contents_->GetController().GetActiveEntry();
328 entry->GetFavicon().image = gfx::Image(); 336 entry->GetFavicon().image = gfx::Image();
329 entry->GetFavicon().valid = true; 337 entry->GetFavicon().valid = true;
330 338
331 // Register on-load actions. 339 // Register on-load actions.
332 registrar_.Add( 340 registrar_.Add(
333 this, chrome::NOTIFICATION_BROWSER_THEME_CHANGED, 341 this, chrome::NOTIFICATION_BROWSER_THEME_CHANGED,
334 content::Source<ThemeService>( 342 content::Source<ThemeService>(
335 ThemeServiceFactory::GetForProfile(profile_))); 343 ThemeServiceFactory::GetForProfile(profile_)));
336 344
337 embedder_message_dispatcher_.reset( 345 embedder_message_dispatcher_.reset(
338 DevToolsEmbedderMessageDispatcher::createForDevToolsFrontend(this)); 346 DevToolsEmbedderMessageDispatcher::createForDevToolsFrontend(this));
339 } 347 }
340 348
341 DevToolsUIBindings::~DevToolsUIBindings() { 349 DevToolsUIBindings::~DevToolsUIBindings() {
342 content::DevToolsManager::GetInstance()->ClientHostClosing( 350 content::DevToolsManager::GetInstance()->ClientHostClosing(this);
343 frontend_host_.get());
344 351
345 for (IndexingJobsMap::const_iterator jobs_it(indexing_jobs_.begin()); 352 for (IndexingJobsMap::const_iterator jobs_it(indexing_jobs_.begin());
346 jobs_it != indexing_jobs_.end(); ++jobs_it) { 353 jobs_it != indexing_jobs_.end(); ++jobs_it) {
347 jobs_it->second->Stop(); 354 jobs_it->second->Stop();
348 } 355 }
349 indexing_jobs_.clear(); 356 indexing_jobs_.clear();
350 SetDeviceCountUpdatesEnabled(false); 357 SetDeviceCountUpdatesEnabled(false);
351 SetDevicesUpdatesEnabled(false); 358 SetDevicesUpdatesEnabled(false);
352 } 359 }
353 360
354 void DevToolsUIBindings::InspectedContentsClosing() { 361 // content::NotificationObserver overrides ------------------------------------
355 delegate_->InspectedContentsClosing();
356 }
357
358 void DevToolsUIBindings::Observe(int type, 362 void DevToolsUIBindings::Observe(int type,
359 const content::NotificationSource& source, 363 const content::NotificationSource& source,
360 const content::NotificationDetails& details) { 364 const content::NotificationDetails& details) {
361 DCHECK_EQ(chrome::NOTIFICATION_BROWSER_THEME_CHANGED, type); 365 DCHECK_EQ(chrome::NOTIFICATION_BROWSER_THEME_CHANGED, type);
362 UpdateTheme(); 366 UpdateTheme();
363 } 367 }
364 368
365 void DevToolsUIBindings::DispatchOnEmbedder(const std::string& message) { 369 // content::DevToolsFrontendHost::Delegate implementation ---------------------
370 bool DevToolsUIBindings::ShouldSetupDevToolsFrontendForUrl(const GURL& url) {
371 return url.SchemeIs(content::kChromeDevToolsScheme);
pfeldman 2014/07/31 11:47:25 It seems like we can make this decision in content
372 }
373
374 void DevToolsUIBindings::HandleMessageFromDevToolsFrontend(
375 const std::string& message) {
366 std::string method; 376 std::string method;
367 base::ListValue empty_params; 377 base::ListValue empty_params;
368 base::ListValue* params = &empty_params; 378 base::ListValue* params = &empty_params;
369 379
370 base::DictionaryValue* dict = NULL; 380 base::DictionaryValue* dict = NULL;
371 scoped_ptr<base::Value> parsed_message(base::JSONReader::Read(message)); 381 scoped_ptr<base::Value> parsed_message(base::JSONReader::Read(message));
372 if (!parsed_message || 382 if (!parsed_message ||
373 !parsed_message->GetAsDictionary(&dict) || 383 !parsed_message->GetAsDictionary(&dict) ||
374 !dict->GetString(kFrontendHostMethod, &method) || 384 !dict->GetString(kFrontendHostMethod, &method) ||
375 (dict->HasKey(kFrontendHostParams) && 385 (dict->HasKey(kFrontendHostParams) &&
376 !dict->GetList(kFrontendHostParams, &params))) { 386 !dict->GetList(kFrontendHostParams, &params))) {
377 LOG(ERROR) << "Invalid message was sent to embedder: " << message; 387 LOG(ERROR) << "Invalid message was sent to embedder: " << message;
378 return; 388 return;
379 } 389 }
380 390
381 int id = 0; 391 int id = 0;
382 dict->GetInteger(kFrontendHostId, &id); 392 dict->GetInteger(kFrontendHostId, &id);
383 393
384 std::string error; 394 std::string error;
385 embedder_message_dispatcher_->Dispatch(method, params, &error); 395 embedder_message_dispatcher_->Dispatch(method, params, &error);
386 if (id) { 396 if (id) {
387 base::FundamentalValue id_value(id); 397 base::FundamentalValue id_value(id);
388 base::StringValue error_value(error); 398 base::StringValue error_value(error);
389 CallClientFunction("InspectorFrontendAPI.embedderMessageAck", 399 CallClientFunction("InspectorFrontendAPI.embedderMessageAck",
390 &id_value, &error_value, NULL); 400 &id_value, &error_value, NULL);
391 } 401 }
392 } 402 }
393 403
404 void DevToolsUIBindings::HandleMessageFromDevToolsFrontendToBackend(
405 const std::string& message) {
406 content::DevToolsManager::GetInstance()->DispatchOnInspectorBackend(
407 this, message);
408 }
409
410 // content::DevToolsClientHost implementation ---------------------------------
411 void DevToolsUIBindings::DispatchOnInspectorFrontend(
412 const std::string& message) {
413 frontend_host_->DispatchOnDevToolsFrontend(message);
pfeldman 2014/07/31 11:47:25 Can we use a CallClientFunction here?
dgozman 2014/07/31 13:05:31 There is a TODO for that. It requires some blink-s
414 }
415
416 void DevToolsUIBindings::InspectedContentsClosing() {
417 delegate_->InspectedContentsClosing();
418 }
419
420 void DevToolsUIBindings::ReplacedWithAnotherClient() {
421 }
422
423 // DevToolsEmbedderMessageDispatcher::Delegate implementation -----------------
394 void DevToolsUIBindings::ActivateWindow() { 424 void DevToolsUIBindings::ActivateWindow() {
395 delegate_->ActivateWindow(); 425 delegate_->ActivateWindow();
396 } 426 }
397 427
398 void DevToolsUIBindings::CloseWindow() { 428 void DevToolsUIBindings::CloseWindow() {
399 delegate_->CloseWindow(); 429 delegate_->CloseWindow();
400 } 430 }
401 431
402 void DevToolsUIBindings::SetInspectedPageBounds(const gfx::Rect& rect) { 432 void DevToolsUIBindings::SetInspectedPageBounds(const gfx::Rect& rect) {
403 delegate_->SetInspectedPageBounds(rect); 433 delegate_->SetInspectedPageBounds(rect);
(...skipping 367 matching lines...) Expand 10 before | Expand all | Expand 10 after
771 web_contents_->GetMainFrame()->ExecuteJavaScript(javascript); 801 web_contents_->GetMainFrame()->ExecuteJavaScript(javascript);
772 } 802 }
773 803
774 void DevToolsUIBindings::DocumentOnLoadCompletedInMainFrame() { 804 void DevToolsUIBindings::DocumentOnLoadCompletedInMainFrame() {
775 // Call delegate first - it seeds importants bit of information. 805 // Call delegate first - it seeds importants bit of information.
776 delegate_->OnLoadCompleted(); 806 delegate_->OnLoadCompleted();
777 807
778 UpdateTheme(); 808 UpdateTheme();
779 AddDevToolsExtensionsToClient(); 809 AddDevToolsExtensionsToClient();
780 } 810 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698