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

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

Issue 108213012: [DevTools] Remove dock side knowledge from browser. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 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 (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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_window.h" 5 #include "chrome/browser/devtools/devtools_window.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/json/json_reader.h" 10 #include "base/json/json_reader.h"
(...skipping 210 matching lines...) Expand 10 before | Expand all | Expand 10 after
221 } 221 }
222 222
223 // DevToolsWindow ------------------------------------------------------------- 223 // DevToolsWindow -------------------------------------------------------------
224 224
225 namespace { 225 namespace {
226 226
227 typedef std::vector<DevToolsWindow*> DevToolsWindows; 227 typedef std::vector<DevToolsWindow*> DevToolsWindows;
228 base::LazyInstance<DevToolsWindows>::Leaky g_instances = 228 base::LazyInstance<DevToolsWindows>::Leaky g_instances =
229 LAZY_INSTANCE_INITIALIZER; 229 LAZY_INSTANCE_INITIALIZER;
230 230
231 const char kPrefBottom[] = "dock_bottom";
232 const char kPrefRight[] = "dock_right";
233 const char kPrefUndocked[] = "undocked";
234
235 const char kDockSideBottom[] = "bottom"; 231 const char kDockSideBottom[] = "bottom";
236 const char kDockSideRight[] = "right"; 232 const char kDockSideRight[] = "right";
237 const char kDockSideUndocked[] = "undocked"; 233 const char kDockSideUndocked[] = "undocked";
238 const char kDockSideMinimized[] = "minimized"; 234 const char kDockSideMinimized[] = "minimized";
239 235
240 static const char kFrontendHostId[] = "id"; 236 static const char kFrontendHostId[] = "id";
241 static const char kFrontendHostMethod[] = "method"; 237 static const char kFrontendHostMethod[] = "method";
242 static const char kFrontendHostParams[] = "params"; 238 static const char kFrontendHostParams[] = "params";
243 239
244 std::string SkColorToRGBAString(SkColor color) { 240 std::string SkColorToRGBAString(SkColor color) {
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
283 279
284 // static 280 // static
285 std::string DevToolsWindow::GetDevToolsWindowPlacementPrefKey() { 281 std::string DevToolsWindow::GetDevToolsWindowPlacementPrefKey() {
286 return std::string(prefs::kBrowserWindowPlacement) + "_" + 282 return std::string(prefs::kBrowserWindowPlacement) + "_" +
287 std::string(kDevToolsApp); 283 std::string(kDevToolsApp);
288 } 284 }
289 285
290 // static 286 // static
291 void DevToolsWindow::RegisterProfilePrefs( 287 void DevToolsWindow::RegisterProfilePrefs(
292 user_prefs::PrefRegistrySyncable* registry) { 288 user_prefs::PrefRegistrySyncable* registry) {
293 registry->RegisterBooleanPref(
294 prefs::kDevToolsOpenDocked, true,
295 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
296 registry->RegisterStringPref(
297 prefs::kDevToolsDockSide, kDockSideBottom,
298 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
299 registry->RegisterDictionaryPref( 289 registry->RegisterDictionaryPref(
300 prefs::kDevToolsEditedFiles, 290 prefs::kDevToolsEditedFiles,
301 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 291 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
302 registry->RegisterDictionaryPref( 292 registry->RegisterDictionaryPref(
303 prefs::kDevToolsFileSystemPaths, 293 prefs::kDevToolsFileSystemPaths,
304 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 294 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
305 registry->RegisterStringPref( 295 registry->RegisterStringPref(
306 prefs::kDevToolsAdbKey, std::string(), 296 prefs::kDevToolsAdbKey, std::string(),
307 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 297 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
308 298
(...skipping 16 matching lines...) Expand all
325 registry->RegisterDictionaryPref( 315 registry->RegisterDictionaryPref(
326 prefs::kDevToolsPortForwardingConfig, 316 prefs::kDevToolsPortForwardingConfig,
327 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 317 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
328 } 318 }
329 319
330 // static 320 // static
331 DevToolsWindow* DevToolsWindow::GetDockedInstanceForInspectedTab( 321 DevToolsWindow* DevToolsWindow::GetDockedInstanceForInspectedTab(
332 content::WebContents* inspected_web_contents) { 322 content::WebContents* inspected_web_contents) {
333 DevToolsWindow* window = GetInstanceForInspectedRenderViewHost( 323 DevToolsWindow* window = GetInstanceForInspectedRenderViewHost(
334 inspected_web_contents->GetRenderViewHost()); 324 inspected_web_contents->GetRenderViewHost());
335 return (window && window->IsDocked()) ? window : NULL; 325 return (window && window->is_docked_) ? window : NULL;
336 } 326 }
337 327
338 // static 328 // static
339 DevToolsWindow* DevToolsWindow::GetInstanceForInspectedRenderViewHost( 329 DevToolsWindow* DevToolsWindow::GetInstanceForInspectedRenderViewHost(
340 content::RenderViewHost* inspected_rvh) { 330 content::RenderViewHost* inspected_rvh) {
341 if (!inspected_rvh || !DevToolsAgentHost::HasFor(inspected_rvh)) 331 if (!inspected_rvh || !DevToolsAgentHost::HasFor(inspected_rvh))
342 return NULL; 332 return NULL;
343 333
344 scoped_refptr<DevToolsAgentHost> agent(DevToolsAgentHost::GetOrCreateFor( 334 scoped_refptr<DevToolsAgentHost> agent(DevToolsAgentHost::GetOrCreateFor(
345 inspected_rvh)); 335 inspected_rvh));
346 return FindDevToolsWindow(agent.get()); 336 return FindDevToolsWindow(agent.get());
347 } 337 }
348 338
349 // static 339 // static
350 bool DevToolsWindow::IsDevToolsWindow(content::RenderViewHost* window_rvh) { 340 bool DevToolsWindow::IsDevToolsWindow(content::RenderViewHost* window_rvh) {
351 return AsDevToolsWindow(window_rvh) != NULL; 341 return AsDevToolsWindow(window_rvh) != NULL;
352 } 342 }
353 343
354 // static 344 // static
355 DevToolsWindow* DevToolsWindow::OpenDevToolsWindowForWorker( 345 DevToolsWindow* DevToolsWindow::OpenDevToolsWindowForWorker(
356 Profile* profile, 346 Profile* profile,
357 DevToolsAgentHost* worker_agent) { 347 DevToolsAgentHost* worker_agent) {
358 DevToolsWindow* window = FindDevToolsWindow(worker_agent); 348 DevToolsWindow* window = FindDevToolsWindow(worker_agent);
359 if (!window) { 349 if (!window) {
360 window = DevToolsWindow::CreateDevToolsWindowForWorker(profile); 350 window = DevToolsWindow::CreateDevToolsWindowForWorker(profile);
361 // Will disconnect the current client host if there is one. 351 // Will disconnect the current client host if there is one.
362 content::DevToolsManager::GetInstance()->RegisterDevToolsClientHostFor( 352 content::DevToolsManager::GetInstance()->RegisterDevToolsClientHostFor(
363 worker_agent, window->frontend_host_.get()); 353 worker_agent, window->frontend_host_.get());
364 } 354 }
365 window->Show(DevToolsToggleAction::Show()); 355 window->ScheduleShow(DevToolsToggleAction::Show());
366 return window; 356 return window;
367 } 357 }
368 358
369 // static 359 // static
370 DevToolsWindow* DevToolsWindow::CreateDevToolsWindowForWorker( 360 DevToolsWindow* DevToolsWindow::CreateDevToolsWindowForWorker(
371 Profile* profile) { 361 Profile* profile) {
372 content::RecordAction(content::UserMetricsAction("DevTools_InspectWorker")); 362 content::RecordAction(content::UserMetricsAction("DevTools_InspectWorker"));
373 return Create(profile, GURL(), NULL, DEVTOOLS_DOCK_SIDE_UNDOCKED, true, 363 return Create(profile, GURL(), NULL, true, false, false);
374 false, false);
375 } 364 }
376 365
377 // static 366 // static
378 DevToolsWindow* DevToolsWindow::OpenDevToolsWindow( 367 DevToolsWindow* DevToolsWindow::OpenDevToolsWindow(
379 content::RenderViewHost* inspected_rvh) { 368 content::RenderViewHost* inspected_rvh) {
380 return ToggleDevToolsWindow( 369 return ToggleDevToolsWindow(
381 inspected_rvh, true, DevToolsToggleAction::Show()); 370 inspected_rvh, true, DevToolsToggleAction::Show());
382 } 371 }
383 372
384 // static 373 // static
374 DevToolsWindow* DevToolsWindow::OpenDevToolsWindow(
375 content::RenderViewHost* inspected_rvh,
376 const DevToolsToggleAction& action) {
377 return ToggleDevToolsWindow(
378 inspected_rvh, true, action);
379 }
380
381 // static
385 DevToolsWindow* DevToolsWindow::ToggleDevToolsWindow( 382 DevToolsWindow* DevToolsWindow::ToggleDevToolsWindow(
386 Browser* browser, 383 Browser* browser,
387 const DevToolsToggleAction& action) { 384 const DevToolsToggleAction& action) {
388 if (action.type() == DevToolsToggleAction::kToggle && 385 if (action.type() == DevToolsToggleAction::kToggle &&
389 browser->is_devtools()) { 386 browser->is_devtools()) {
390 browser->tab_strip_model()->CloseAllTabs(); 387 browser->tab_strip_model()->CloseAllTabs();
391 return NULL; 388 return NULL;
392 } 389 }
393 390
394 return ToggleDevToolsWindow( 391 return ToggleDevToolsWindow(
395 browser->tab_strip_model()->GetActiveWebContents()->GetRenderViewHost(), 392 browser->tab_strip_model()->GetActiveWebContents()->GetRenderViewHost(),
396 action.type() == DevToolsToggleAction::kInspect, action); 393 action.type() == DevToolsToggleAction::kInspect, action);
397 } 394 }
398 395
399 // static 396 // static
400 void DevToolsWindow::OpenExternalFrontend( 397 void DevToolsWindow::OpenExternalFrontend(
401 Profile* profile, 398 Profile* profile,
402 const std::string& frontend_url, 399 const std::string& frontend_url,
403 content::DevToolsAgentHost* agent_host) { 400 content::DevToolsAgentHost* agent_host) {
404 DevToolsWindow* window = FindDevToolsWindow(agent_host); 401 DevToolsWindow* window = FindDevToolsWindow(agent_host);
405 if (!window) { 402 if (!window) {
406 window = Create(profile, DevToolsUI::GetProxyURL(frontend_url), NULL, 403 window = Create(profile, DevToolsUI::GetProxyURL(frontend_url), NULL,
407 DEVTOOLS_DOCK_SIDE_UNDOCKED, false, true, false); 404 false, true, false);
408 content::DevToolsManager::GetInstance()->RegisterDevToolsClientHostFor( 405 content::DevToolsManager::GetInstance()->RegisterDevToolsClientHostFor(
409 agent_host, window->frontend_host_.get()); 406 agent_host, window->frontend_host_.get());
410 } 407 }
411 window->Show(DevToolsToggleAction::Show()); 408 window->ScheduleShow(DevToolsToggleAction::Show());
412 } 409 }
413 410
414 // static 411 // static
415 DevToolsWindow* DevToolsWindow::ToggleDevToolsWindow( 412 DevToolsWindow* DevToolsWindow::ToggleDevToolsWindow(
416 content::RenderViewHost* inspected_rvh, 413 content::RenderViewHost* inspected_rvh,
417 bool force_open, 414 bool force_open,
418 const DevToolsToggleAction& action) { 415 const DevToolsToggleAction& action) {
419 scoped_refptr<DevToolsAgentHost> agent( 416 scoped_refptr<DevToolsAgentHost> agent(
420 DevToolsAgentHost::GetOrCreateFor(inspected_rvh)); 417 DevToolsAgentHost::GetOrCreateFor(inspected_rvh));
421 content::DevToolsManager* manager = content::DevToolsManager::GetInstance(); 418 content::DevToolsManager* manager = content::DevToolsManager::GetInstance();
422 DevToolsWindow* window = FindDevToolsWindow(agent.get()); 419 DevToolsWindow* window = FindDevToolsWindow(agent.get());
423 bool do_open = force_open; 420 bool do_open = force_open;
424 if (!window) { 421 if (!window) {
425 Profile* profile = Profile::FromBrowserContext( 422 Profile* profile = Profile::FromBrowserContext(
426 inspected_rvh->GetProcess()->GetBrowserContext()); 423 inspected_rvh->GetProcess()->GetBrowserContext());
427 DevToolsDockSide dock_side = GetDockSideFromPrefs(profile);
428 content::RecordAction( 424 content::RecordAction(
429 content::UserMetricsAction("DevTools_InspectRenderer")); 425 content::UserMetricsAction("DevTools_InspectRenderer"));
430 window = Create(profile, GURL(), inspected_rvh, dock_side, false, false, 426 window = Create(profile, GURL(), inspected_rvh, false, false,
431 true); 427 true);
432 manager->RegisterDevToolsClientHostFor(agent.get(), 428 manager->RegisterDevToolsClientHostFor(agent.get(),
433 window->frontend_host_.get()); 429 window->frontend_host_.get());
434 do_open = true; 430 do_open = true;
435 } 431 }
436 432
437 // Update toolbar to reflect DevTools changes. 433 // Update toolbar to reflect DevTools changes.
438 window->UpdateBrowserToolbar(); 434 window->UpdateBrowserToolbar();
439 435
440 // If window is docked and visible, we hide it on toggle. If window is 436 // If window is docked and visible, we hide it on toggle. If window is
441 // undocked, we show (activate) it. If window is minimized, we maximize it. 437 // undocked, we show (activate) it.
442 if (window->dock_side_ == DEVTOOLS_DOCK_SIDE_MINIMIZED) 438 if (!window->is_docked_ || do_open)
443 window->Restore(); 439 window->ScheduleShow(action);
444 else if (!window->IsDocked() || do_open)
445 window->Show(action);
446 else 440 else
447 window->CloseWindow(); 441 window->CloseWindow();
448 442
449 return window; 443 return window;
450 } 444 }
451 445
452 // static 446 // static
453 void DevToolsWindow::InspectElement(content::RenderViewHost* inspected_rvh, 447 void DevToolsWindow::InspectElement(content::RenderViewHost* inspected_rvh,
454 int x, 448 int x,
455 int y) { 449 int y) {
(...skipping 13 matching lines...) Expand all
469 463
470 void DevToolsWindow::InspectedContentsClosing() { 464 void DevToolsWindow::InspectedContentsClosing() {
471 intercepted_page_beforeunload_ = false; 465 intercepted_page_beforeunload_ = false;
472 web_contents_->GetRenderViewHost()->ClosePage(); 466 web_contents_->GetRenderViewHost()->ClosePage();
473 } 467 }
474 468
475 content::RenderViewHost* DevToolsWindow::GetRenderViewHost() { 469 content::RenderViewHost* DevToolsWindow::GetRenderViewHost() {
476 return web_contents_->GetRenderViewHost(); 470 return web_contents_->GetRenderViewHost();
477 } 471 }
478 472
479 content::DevToolsClientHost* DevToolsWindow::GetDevToolsClientHostForTest() {
480 return frontend_host_.get();
481 }
482
483 gfx::Insets DevToolsWindow::GetContentsInsets() const { 473 gfx::Insets DevToolsWindow::GetContentsInsets() const {
484 return contents_insets_; 474 return contents_insets_;
485 } 475 }
486 476
487 gfx::Size DevToolsWindow::GetMinimumSize() const { 477 gfx::Size DevToolsWindow::GetMinimumSize() const {
488 const gfx::Size kMinDevToolsSize = gfx::Size(200, 100); 478 const gfx::Size kMinDevToolsSize = gfx::Size(200, 100);
489 return kMinDevToolsSize; 479 return kMinDevToolsSize;
490 } 480 }
491 481
482 void DevToolsWindow::ScheduleShow(const DevToolsToggleAction& action) {
483 if (load_state_mask_ == kLoadCompleted)
484 Show(action);
485 else
486 action_on_load_ = action;
487 }
488
492 void DevToolsWindow::Show(const DevToolsToggleAction& action) { 489 void DevToolsWindow::Show(const DevToolsToggleAction& action) {
493 if (IsDocked()) { 490 if (action.type() == DevToolsToggleAction::kNothing)
491 return;
492
493 if (is_docked_) {
494 DCHECK(can_dock_);
494 Browser* inspected_browser = NULL; 495 Browser* inspected_browser = NULL;
495 int inspected_tab_index = -1; 496 int inspected_tab_index = -1;
497 FindInspectedBrowserAndTabIndex(GetInspectedWebContents(),
498 &inspected_browser,
499 &inspected_tab_index);
500 DCHECK(inspected_browser);
501 DCHECK(inspected_tab_index);
502
496 // Tell inspected browser to update splitter and switch to inspected panel. 503 // Tell inspected browser to update splitter and switch to inspected panel.
497 if (!IsInspectedBrowserPopup() && 504 BrowserWindow* inspected_window = inspected_browser->window();
498 FindInspectedBrowserAndTabIndex(GetInspectedWebContents(), 505 web_contents_->SetDelegate(this);
499 &inspected_browser, 506 inspected_window->UpdateDevTools();
500 &inspected_tab_index)) { 507 web_contents_->GetView()->SetInitialFocus();
501 BrowserWindow* inspected_window = inspected_browser->window(); 508 inspected_window->Show();
502 web_contents_->SetDelegate(this);
503 inspected_window->UpdateDevTools();
504 web_contents_->GetView()->SetInitialFocus();
505 inspected_window->Show();
506 TabStripModel* tab_strip_model = inspected_browser->tab_strip_model();
507 tab_strip_model->ActivateTabAt(inspected_tab_index, true);
508 PrefsTabHelper::CreateForWebContents(web_contents_);
509 GetRenderViewHost()->SyncRendererPrefs();
510 ScheduleAction(action);
511 return;
512 }
513 509
514 // Sometimes we don't know where to dock. Stay undocked. 510 TabStripModel* tab_strip_model = inspected_browser->tab_strip_model();
515 dock_side_ = DEVTOOLS_DOCK_SIDE_UNDOCKED; 511 tab_strip_model->ActivateTabAt(inspected_tab_index, true);
512 PrefsTabHelper::CreateForWebContents(web_contents_);
513 GetRenderViewHost()->SyncRendererPrefs();
514
515 DoAction(action);
516 return;
516 } 517 }
517 518
518 // Avoid consecutive window switching if the devtools window has been opened 519 // Avoid consecutive window switching if the devtools window has been opened
519 // and the Inspect Element shortcut is pressed in the inspected tab. 520 // and the Inspect Element shortcut is pressed in the inspected tab.
520 bool should_show_window = 521 bool should_show_window =
521 !browser_ || (action.type() != DevToolsToggleAction::kInspect); 522 !browser_ || (action.type() != DevToolsToggleAction::kInspect);
522 523
523 if (!browser_) 524 if (!browser_)
524 CreateDevToolsBrowser(); 525 CreateDevToolsBrowser();
525 526
526 if (should_show_window) { 527 if (should_show_window) {
527 browser_->window()->Show(); 528 browser_->window()->Show();
528 web_contents_->GetView()->SetInitialFocus(); 529 web_contents_->GetView()->SetInitialFocus();
529 } 530 }
530 531
531 ScheduleAction(action); 532 DoAction(action);
532 } 533 }
533 534
534 // static 535 // static
535 bool DevToolsWindow::HandleBeforeUnload(content::WebContents* frontend_contents, 536 bool DevToolsWindow::HandleBeforeUnload(content::WebContents* frontend_contents,
536 bool proceed, bool* proceed_to_fire_unload) { 537 bool proceed, bool* proceed_to_fire_unload) {
537 DevToolsWindow* window = AsDevToolsWindow( 538 DevToolsWindow* window = AsDevToolsWindow(
538 frontend_contents->GetRenderViewHost()); 539 frontend_contents->GetRenderViewHost());
539 if (!window) 540 if (!window)
540 return false; 541 return false;
541 if (!window->intercepted_page_beforeunload_) 542 if (!window->intercepted_page_beforeunload_)
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
593 DevToolsWindow *window = 594 DevToolsWindow *window =
594 DevToolsWindow::GetInstanceForInspectedRenderViewHost( 595 DevToolsWindow::GetInstanceForInspectedRenderViewHost(
595 contents->GetRenderViewHost()); 596 contents->GetRenderViewHost());
596 if (!window) 597 if (!window)
597 return; 598 return;
598 window->intercepted_page_beforeunload_ = false; 599 window->intercepted_page_beforeunload_ = false;
599 // Propagate to devtools opened on devtools if any. 600 // Propagate to devtools opened on devtools if any.
600 DevToolsWindow::OnPageCloseCanceled(window->web_contents()); 601 DevToolsWindow::OnPageCloseCanceled(window->web_contents());
601 } 602 }
602 603
603 void DevToolsWindow::SetDockSideForTest(DevToolsDockSide dock_side) {
604 SetDockSide(SideToString(dock_side));
605 }
606
607 DevToolsWindow::DevToolsWindow(Profile* profile, 604 DevToolsWindow::DevToolsWindow(Profile* profile,
608 const GURL& url, 605 const GURL& url,
609 content::RenderViewHost* inspected_rvh, 606 content::RenderViewHost* inspected_rvh,
610 DevToolsDockSide dock_side) 607 bool can_dock)
611 : profile_(profile), 608 : profile_(profile),
612 browser_(NULL), 609 browser_(NULL),
613 dock_side_(dock_side), 610 is_docked_(false),
614 is_loaded_(false), 611 can_dock_(can_dock),
615 action_on_load_(DevToolsToggleAction::Show()), 612 load_state_mask_(can_dock ? kNotLoaded : kIsDockedSet),
dgozman 2013/12/30 13:06:17 This initialization allows old frontends to work a
616 dock_side_before_minimized_(dock_side), 613 action_on_load_(DevToolsToggleAction::Nothing()),
614 set_is_docked_for_test_on_load_(false),
617 intercepted_page_beforeunload_(false), 615 intercepted_page_beforeunload_(false),
618 weak_factory_(this) { 616 weak_factory_(this) {
619 web_contents_ = 617 web_contents_ =
620 content::WebContents::Create(content::WebContents::CreateParams(profile)); 618 content::WebContents::Create(content::WebContents::CreateParams(profile));
621 frontend_contents_observer_.reset(new FrontendWebContentsObserver(this)); 619 frontend_contents_observer_.reset(new FrontendWebContentsObserver(this));
622 620
623 web_contents_->GetController().LoadURL(url, content::Referrer(), 621 web_contents_->GetController().LoadURL(url, content::Referrer(),
624 content::PAGE_TRANSITION_AUTO_TOPLEVEL, std::string()); 622 content::PAGE_TRANSITION_AUTO_TOPLEVEL, std::string());
625 623
626 frontend_host_.reset(content::DevToolsClientHost::CreateDevToolsFrontendHost( 624 frontend_host_.reset(content::DevToolsClientHost::CreateDevToolsFrontendHost(
(...skipping 23 matching lines...) Expand all
650 648
651 embedder_message_dispatcher_.reset( 649 embedder_message_dispatcher_.reset(
652 new DevToolsEmbedderMessageDispatcher(this)); 650 new DevToolsEmbedderMessageDispatcher(this));
653 } 651 }
654 652
655 // static 653 // static
656 DevToolsWindow* DevToolsWindow::Create( 654 DevToolsWindow* DevToolsWindow::Create(
657 Profile* profile, 655 Profile* profile,
658 const GURL& frontend_url, 656 const GURL& frontend_url,
659 content::RenderViewHost* inspected_rvh, 657 content::RenderViewHost* inspected_rvh,
660 DevToolsDockSide dock_side,
661 bool shared_worker_frontend, 658 bool shared_worker_frontend,
662 bool external_frontend, 659 bool external_frontend,
663 bool can_dock) { 660 bool can_dock) {
664 if (inspected_rvh) { 661 if (inspected_rvh) {
665 // Check for a place to dock. 662 // Check for a place to dock.
666 Browser* browser = NULL; 663 Browser* browser = NULL;
667 int tab; 664 int tab;
668 content::WebContents* inspected_web_contents = 665 content::WebContents* inspected_web_contents =
669 content::WebContents::FromRenderViewHost(inspected_rvh); 666 content::WebContents::FromRenderViewHost(inspected_rvh);
670 if (!FindInspectedBrowserAndTabIndex(inspected_web_contents, 667 if (!FindInspectedBrowserAndTabIndex(inspected_web_contents,
671 &browser, &tab) || 668 &browser, &tab) ||
672 browser->is_type_popup()) { 669 browser->is_type_popup()) {
673 can_dock = false; 670 can_dock = false;
674 } 671 }
675 } 672 }
676 673
677 // Create WebContents with devtools. 674 // Create WebContents with devtools.
678 GURL url(GetDevToolsURL(profile, frontend_url, dock_side, 675 GURL url(GetDevToolsURL(profile, frontend_url,
679 shared_worker_frontend, 676 shared_worker_frontend,
680 external_frontend, 677 external_frontend,
681 can_dock)); 678 can_dock));
682 return new DevToolsWindow(profile, url, inspected_rvh, dock_side); 679 return new DevToolsWindow(profile, url, inspected_rvh, can_dock);
683 } 680 }
684 681
685 // static 682 // static
686 GURL DevToolsWindow::GetDevToolsURL(Profile* profile, 683 GURL DevToolsWindow::GetDevToolsURL(Profile* profile,
687 const GURL& base_url, 684 const GURL& base_url,
688 DevToolsDockSide dock_side,
689 bool shared_worker_frontend, 685 bool shared_worker_frontend,
690 bool external_frontend, 686 bool external_frontend,
691 bool can_dock) { 687 bool can_dock) {
692 if (base_url.SchemeIs("data")) 688 if (base_url.SchemeIs("data"))
693 return base_url; 689 return base_url;
694 690
695 std::string frontend_url( 691 std::string frontend_url(
696 base_url.is_empty() ? chrome::kChromeUIDevToolsURL : base_url.spec()); 692 base_url.is_empty() ? chrome::kChromeUIDevToolsURL : base_url.spec());
697 ThemeService* tp = ThemeServiceFactory::GetForProfile(profile); 693 ThemeService* tp = ThemeServiceFactory::GetForProfile(profile);
698 DCHECK(tp); 694 DCHECK(tp);
699 std::string url_string( 695 std::string url_string(
700 frontend_url + 696 frontend_url +
701 ((frontend_url.find("?") == std::string::npos) ? "?" : "&") + 697 ((frontend_url.find("?") == std::string::npos) ? "?" : "&") +
702 "dockSide=" + SideToString(dock_side) + 698 "dockSide=undocked" + // TODO(dgozman): remove this support in M38.
703 "&toolbarColor=" + 699 "&toolbarColor=" +
704 SkColorToRGBAString(tp->GetColor(ThemeProperties::COLOR_TOOLBAR)) + 700 SkColorToRGBAString(tp->GetColor(ThemeProperties::COLOR_TOOLBAR)) +
705 "&textColor=" + 701 "&textColor=" +
706 SkColorToRGBAString(tp->GetColor(ThemeProperties::COLOR_BOOKMARK_TEXT))); 702 SkColorToRGBAString(tp->GetColor(ThemeProperties::COLOR_BOOKMARK_TEXT)));
707 if (shared_worker_frontend) 703 if (shared_worker_frontend)
708 url_string += "&isSharedWorker=true"; 704 url_string += "&isSharedWorker=true";
709 if (external_frontend) 705 if (external_frontend)
710 url_string += "&remoteFrontend=true"; 706 url_string += "&remoteFrontend=true";
711 if (can_dock) 707 if (can_dock)
712 url_string += "&can_dock=true"; 708 url_string += "&can_dock=true";
(...skipping 27 matching lines...) Expand all
740 DevToolsWindows* instances = &g_instances.Get(); 736 DevToolsWindows* instances = &g_instances.Get();
741 for (DevToolsWindows::iterator it(instances->begin()); it != instances->end(); 737 for (DevToolsWindows::iterator it(instances->begin()); it != instances->end();
742 ++it) { 738 ++it) {
743 if ((*it)->web_contents_->GetRenderViewHost() == window_rvh) 739 if ((*it)->web_contents_->GetRenderViewHost() == window_rvh)
744 return *it; 740 return *it;
745 } 741 }
746 return NULL; 742 return NULL;
747 } 743 }
748 744
749 // static 745 // static
750 DevToolsDockSide DevToolsWindow::GetDockSideFromPrefs(Profile* profile) { 746 bool DevToolsWindow::IsDockedFromString(const std::string& dock_side) {
751 std::string dock_side = 747 return dock_side != kDockSideUndocked;
752 profile->GetPrefs()->GetString(prefs::kDevToolsDockSide);
753
754 // Migrate prefs.
755 const char kOldPrefBottom[] = "bottom";
756 const char kOldPrefRight[] = "right";
757 if ((dock_side == kOldPrefBottom) || (dock_side == kOldPrefRight)) {
758 if (!profile->GetPrefs()->GetBoolean(prefs::kDevToolsOpenDocked))
759 return DEVTOOLS_DOCK_SIDE_UNDOCKED;
760 return (dock_side == kOldPrefBottom) ?
761 DEVTOOLS_DOCK_SIDE_BOTTOM : DEVTOOLS_DOCK_SIDE_RIGHT;
762 }
763
764 if (dock_side == kPrefUndocked)
765 return DEVTOOLS_DOCK_SIDE_UNDOCKED;
766 if (dock_side == kPrefRight)
767 return DEVTOOLS_DOCK_SIDE_RIGHT;
768 // Default to docked to bottom.
769 return DEVTOOLS_DOCK_SIDE_BOTTOM;
770 }
771
772 // static
773 std::string DevToolsWindow::SideToString(DevToolsDockSide dock_side) {
774 switch (dock_side) {
775 case DEVTOOLS_DOCK_SIDE_UNDOCKED: return kDockSideUndocked;
776 case DEVTOOLS_DOCK_SIDE_RIGHT: return kDockSideRight;
777 case DEVTOOLS_DOCK_SIDE_BOTTOM: return kDockSideBottom;
778 case DEVTOOLS_DOCK_SIDE_MINIMIZED: return kDockSideMinimized;
779 default: return kDockSideUndocked;
780 }
781 }
782
783 // static
784 DevToolsDockSide DevToolsWindow::SideFromString(
785 const std::string& dock_side) {
786 if (dock_side == kDockSideRight)
787 return DEVTOOLS_DOCK_SIDE_RIGHT;
788 if (dock_side == kDockSideBottom)
789 return DEVTOOLS_DOCK_SIDE_BOTTOM;
790 return (dock_side == kDockSideMinimized) ?
791 DEVTOOLS_DOCK_SIDE_MINIMIZED : DEVTOOLS_DOCK_SIDE_UNDOCKED;
792 } 748 }
793 749
794 void DevToolsWindow::Observe(int type, 750 void DevToolsWindow::Observe(int type,
795 const content::NotificationSource& source, 751 const content::NotificationSource& source,
796 const content::NotificationDetails& details) { 752 const content::NotificationDetails& details) {
797 DCHECK_EQ(chrome::NOTIFICATION_BROWSER_THEME_CHANGED, type); 753 DCHECK_EQ(chrome::NOTIFICATION_BROWSER_THEME_CHANGED, type);
798 UpdateTheme(); 754 UpdateTheme();
799 } 755 }
800 756
801 content::WebContents* DevToolsWindow::OpenURLFromTab( 757 content::WebContents* DevToolsWindow::OpenURLFromTab(
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
834 bool* was_blocked) { 790 bool* was_blocked) {
835 content::WebContents* inspected_web_contents = GetInspectedWebContents(); 791 content::WebContents* inspected_web_contents = GetInspectedWebContents();
836 if (inspected_web_contents) { 792 if (inspected_web_contents) {
837 inspected_web_contents->GetDelegate()->AddNewContents( 793 inspected_web_contents->GetDelegate()->AddNewContents(
838 source, new_contents, disposition, initial_pos, user_gesture, 794 source, new_contents, disposition, initial_pos, user_gesture,
839 was_blocked); 795 was_blocked);
840 } 796 }
841 } 797 }
842 798
843 void DevToolsWindow::CloseContents(content::WebContents* source) { 799 void DevToolsWindow::CloseContents(content::WebContents* source) {
844 CHECK(IsDocked()); 800 CHECK(is_docked_);
845 // Update dev tools to reflect removed dev tools window. 801 // Update dev tools to reflect removed dev tools window.
846 BrowserWindow* inspected_window = GetInspectedBrowserWindow(); 802 BrowserWindow* inspected_window = GetInspectedBrowserWindow();
847 if (inspected_window) 803 if (inspected_window)
848 inspected_window->UpdateDevTools(); 804 inspected_window->UpdateDevTools();
849 // In case of docked web_contents_, we own it so delete here. 805 // In case of docked web_contents_, we own it so delete here.
850 // Embedding DevTools window will be deleted as a result of 806 // Embedding DevTools window will be deleted as a result of
851 // WebContentsDestroyed callback. 807 // WebContentsDestroyed callback.
852 delete web_contents_; 808 delete web_contents_;
853 } 809 }
854 810
(...skipping 19 matching lines...) Expand all
874 DCHECK(!should_proceed); 830 DCHECK(!should_proceed);
875 } 831 }
876 *proceed_to_fire_unload = false; 832 *proceed_to_fire_unload = false;
877 } 833 }
878 } 834 }
879 835
880 bool DevToolsWindow::PreHandleKeyboardEvent( 836 bool DevToolsWindow::PreHandleKeyboardEvent(
881 content::WebContents* source, 837 content::WebContents* source,
882 const content::NativeWebKeyboardEvent& event, 838 const content::NativeWebKeyboardEvent& event,
883 bool* is_keyboard_shortcut) { 839 bool* is_keyboard_shortcut) {
884 if (IsDocked()) { 840 if (is_docked_) {
885 BrowserWindow* inspected_window = GetInspectedBrowserWindow(); 841 BrowserWindow* inspected_window = GetInspectedBrowserWindow();
886 if (inspected_window) { 842 if (inspected_window) {
887 return inspected_window->PreHandleKeyboardEvent(event, 843 return inspected_window->PreHandleKeyboardEvent(event,
888 is_keyboard_shortcut); 844 is_keyboard_shortcut);
889 } 845 }
890 } 846 }
891 return false; 847 return false;
892 } 848 }
893 849
894 void DevToolsWindow::HandleKeyboardEvent( 850 void DevToolsWindow::HandleKeyboardEvent(
895 content::WebContents* source, 851 content::WebContents* source,
896 const content::NativeWebKeyboardEvent& event) { 852 const content::NativeWebKeyboardEvent& event) {
897 if (IsDocked()) { 853 if (is_docked_) {
898 if (event.windowsKeyCode == 0x08) { 854 if (event.windowsKeyCode == 0x08) {
899 // Do not navigate back in history on Windows (http://crbug.com/74156). 855 // Do not navigate back in history on Windows (http://crbug.com/74156).
900 return; 856 return;
901 } 857 }
902 BrowserWindow* inspected_window = GetInspectedBrowserWindow(); 858 BrowserWindow* inspected_window = GetInspectedBrowserWindow();
903 if (inspected_window) 859 if (inspected_window)
904 inspected_window->HandleKeyboardEvent(event); 860 inspected_window->HandleKeyboardEvent(event);
905 } 861 }
906 } 862 }
907 863
(...skipping 12 matching lines...) Expand all
920 } 876 }
921 877
922 void DevToolsWindow::RunFileChooser(content::WebContents* web_contents, 878 void DevToolsWindow::RunFileChooser(content::WebContents* web_contents,
923 const content::FileChooserParams& params) { 879 const content::FileChooserParams& params) {
924 FileSelectHelper::RunFileChooser(web_contents, params); 880 FileSelectHelper::RunFileChooser(web_contents, params);
925 } 881 }
926 882
927 void DevToolsWindow::WebContentsFocused(content::WebContents* contents) { 883 void DevToolsWindow::WebContentsFocused(content::WebContents* contents) {
928 Browser* inspected_browser = NULL; 884 Browser* inspected_browser = NULL;
929 int inspected_tab_index = -1; 885 int inspected_tab_index = -1;
930 if (IsDocked() && FindInspectedBrowserAndTabIndex(GetInspectedWebContents(), 886 if (is_docked_ && FindInspectedBrowserAndTabIndex(GetInspectedWebContents(),
931 &inspected_browser, 887 &inspected_browser,
932 &inspected_tab_index)) 888 &inspected_tab_index))
933 inspected_browser->window()->WebContentsFocused(contents); 889 inspected_browser->window()->WebContentsFocused(contents);
934 } 890 }
935 891
936 void DevToolsWindow::DispatchOnEmbedder(const std::string& message) { 892 void DevToolsWindow::DispatchOnEmbedder(const std::string& message) {
937 std::string method; 893 std::string method;
938 base::ListValue empty_params; 894 base::ListValue empty_params;
939 base::ListValue* params = &empty_params; 895 base::ListValue* params = &empty_params;
940 896
(...skipping 14 matching lines...) Expand all
955 std::string error = embedder_message_dispatcher_->Dispatch(method, params); 911 std::string error = embedder_message_dispatcher_->Dispatch(method, params);
956 if (id) { 912 if (id) {
957 scoped_ptr<base::Value> id_value(base::Value::CreateIntegerValue(id)); 913 scoped_ptr<base::Value> id_value(base::Value::CreateIntegerValue(id));
958 scoped_ptr<base::Value> error_value(base::Value::CreateStringValue(error)); 914 scoped_ptr<base::Value> error_value(base::Value::CreateStringValue(error));
959 CallClientFunction("InspectorFrontendAPI.embedderMessageAck", 915 CallClientFunction("InspectorFrontendAPI.embedderMessageAck",
960 id_value.get(), error_value.get(), NULL); 916 id_value.get(), error_value.get(), NULL);
961 } 917 }
962 } 918 }
963 919
964 void DevToolsWindow::ActivateWindow() { 920 void DevToolsWindow::ActivateWindow() {
965 if (IsDocked() && GetInspectedBrowserWindow()) 921 if (is_docked_ && GetInspectedBrowserWindow())
966 web_contents_->GetView()->Focus(); 922 web_contents_->GetView()->Focus();
967 else if (!IsDocked() && !browser_->window()->IsActive()) 923 else if (!is_docked_ && !browser_->window()->IsActive())
968 browser_->window()->Activate(); 924 browser_->window()->Activate();
969 } 925 }
970 926
971 void DevToolsWindow::ActivateContents(content::WebContents* contents) { 927 void DevToolsWindow::ActivateContents(content::WebContents* contents) {
972 if (IsDocked()) { 928 if (is_docked_) {
973 content::WebContents* inspected_tab = this->GetInspectedWebContents(); 929 content::WebContents* inspected_tab = this->GetInspectedWebContents();
974 inspected_tab->GetDelegate()->ActivateContents(inspected_tab); 930 inspected_tab->GetDelegate()->ActivateContents(inspected_tab);
975 } else { 931 } else {
976 browser_->window()->Activate(); 932 browser_->window()->Activate();
977 } 933 }
978 } 934 }
979 935
980 void DevToolsWindow::CloseWindow() { 936 void DevToolsWindow::CloseWindow() {
981 DCHECK(IsDocked()); 937 DCHECK(is_docked_);
982 web_contents_->GetRenderViewHost()->FirePageBeforeUnload(false); 938 web_contents_->GetRenderViewHost()->FirePageBeforeUnload(false);
983 } 939 }
984 940
985 void DevToolsWindow::SetContentsInsets( 941 void DevToolsWindow::SetContentsInsets(
986 int top, int left, int bottom, int right) { 942 int top, int left, int bottom, int right) {
987 if (contents_insets_.top() == top && 943 if (contents_insets_.top() == top &&
988 contents_insets_.left() == left && 944 contents_insets_.left() == left &&
989 contents_insets_.bottom() == bottom && 945 contents_insets_.bottom() == bottom &&
990 contents_insets_.right() == right) { 946 contents_insets_.right() == right) {
991 return; 947 return;
992 } 948 }
993 949
994 contents_insets_ = gfx::Insets(top, left, bottom, right); 950 contents_insets_ = gfx::Insets(top, left, bottom, right);
995 if (IsDocked()) { 951 if (is_docked_) {
996 // Update inspected window. 952 // Update inspected window.
997 BrowserWindow* inspected_window = GetInspectedBrowserWindow(); 953 BrowserWindow* inspected_window = GetInspectedBrowserWindow();
998 if (inspected_window) 954 if (inspected_window)
999 inspected_window->UpdateDevTools(); 955 inspected_window->UpdateDevTools();
1000 } 956 }
1001 } 957 }
1002 958
1003 void DevToolsWindow::MoveWindow(int x, int y) { 959 void DevToolsWindow::MoveWindow(int x, int y) {
1004 if (!IsDocked()) { 960 if (!is_docked_) {
1005 gfx::Rect bounds = browser_->window()->GetBounds(); 961 gfx::Rect bounds = browser_->window()->GetBounds();
1006 bounds.Offset(x, y); 962 bounds.Offset(x, y);
1007 browser_->window()->SetBounds(bounds); 963 browser_->window()->SetBounds(bounds);
1008 } 964 }
1009 } 965 }
1010 966
967 void DevToolsWindow::SetIsDockedForTest(bool is_docked) {
968 SetIsDocked(is_docked);
969 if (load_state_mask_ == kLoadCompleted) {
970 base::FundamentalValue docked(is_docked_);
971 CallClientFunction("InspectorFrontendAPI.setIsDocked", &docked, NULL, NULL);
972 } else {
973 set_is_docked_for_test_on_load_ = true;
974 }
975 }
976
977 void DevToolsWindow::SetIsDockedAndShowImmediatelyForTest(bool is_docked) {
978 is_docked_ = is_docked;
979 LoadCompleted();
980 }
981
1011 void DevToolsWindow::SetDockSide(const std::string& side) { 982 void DevToolsWindow::SetDockSide(const std::string& side) {
1012 DevToolsDockSide requested_side = SideFromString(side); 983 // TODO(dgozman): remove this method after frontend switches to SetIsDocked.
1013 bool dock_requested = requested_side != DEVTOOLS_DOCK_SIDE_UNDOCKED; 984 SetIsDocked(IsDockedFromString(side));
1014 bool is_docked = IsDocked(); 985 }
1015 986
1016 if (dock_requested && 987 void DevToolsWindow::SetIsDocked(bool dock_requested) {
1017 (!GetInspectedWebContents() || !GetInspectedBrowserWindow() || 988 if (dock_requested && !can_dock_)
1018 IsInspectedBrowserPopup())) { 989 return;
1019 // Cannot dock, avoid window flashing due to close-reopen cycle. 990
991 bool was_docked = is_docked_;
992 is_docked_ = dock_requested;
993
994 if (load_state_mask_ != kLoadCompleted) {
995 load_state_mask_ |= kIsDockedSet;
996 if (load_state_mask_ == kLoadCompleted)
997 LoadCompleted();
1020 return; 998 return;
1021 } 999 }
1022 1000
1023 if ((dock_side_ != DEVTOOLS_DOCK_SIDE_MINIMIZED) && 1001 if (dock_requested == was_docked)
1024 (requested_side == DEVTOOLS_DOCK_SIDE_MINIMIZED)) 1002 return;
1025 dock_side_before_minimized_ = dock_side_;
1026 1003
1027 dock_side_ = requested_side; 1004 if (dock_requested && !was_docked) {
1028 if (dock_requested && !is_docked) {
1029 // Detach window from the external devtools browser. It will lead to 1005 // Detach window from the external devtools browser. It will lead to
1030 // the browser object's close and delete. Remove observer first. 1006 // the browser object's close and delete. Remove observer first.
1031 TabStripModel* tab_strip_model = browser_->tab_strip_model(); 1007 TabStripModel* tab_strip_model = browser_->tab_strip_model();
1032 tab_strip_model->DetachWebContentsAt( 1008 tab_strip_model->DetachWebContentsAt(
1033 tab_strip_model->GetIndexOfWebContents(web_contents_)); 1009 tab_strip_model->GetIndexOfWebContents(web_contents_));
1034 browser_ = NULL; 1010 browser_ = NULL;
1035 } else if (!dock_requested && is_docked) { 1011 } else if (!dock_requested && was_docked) {
1036 // Update inspected window to hide split and reset it. 1012 // Update inspected window to hide split and reset it.
1037 BrowserWindow* inspected_window = GetInspectedBrowserWindow(); 1013 BrowserWindow* inspected_window = GetInspectedBrowserWindow();
1038 if (inspected_window) 1014 if (inspected_window)
1039 inspected_window->UpdateDevTools(); 1015 inspected_window->UpdateDevTools();
1040 } 1016 }
1041 1017
1042 if (dock_side_ != DEVTOOLS_DOCK_SIDE_MINIMIZED) {
1043 std::string pref_value = kPrefBottom;
1044 switch (dock_side_) {
1045 case DEVTOOLS_DOCK_SIDE_UNDOCKED:
1046 pref_value = kPrefUndocked;
1047 break;
1048 case DEVTOOLS_DOCK_SIDE_RIGHT:
1049 pref_value = kPrefRight;
1050 break;
1051 case DEVTOOLS_DOCK_SIDE_BOTTOM:
1052 pref_value = kPrefBottom;
1053 break;
1054 case DEVTOOLS_DOCK_SIDE_MINIMIZED:
1055 // We don't persist minimized state.
1056 break;
1057 }
1058 profile_->GetPrefs()->SetString(prefs::kDevToolsDockSide, pref_value);
1059 }
1060
1061 Show(DevToolsToggleAction::Show()); 1018 Show(DevToolsToggleAction::Show());
1062 } 1019 }
1063 1020
1064 void DevToolsWindow::OpenInNewTab(const std::string& url) { 1021 void DevToolsWindow::OpenInNewTab(const std::string& url) {
1065 content::OpenURLParams params( 1022 content::OpenURLParams params(
1066 GURL(url), content::Referrer(), NEW_FOREGROUND_TAB, 1023 GURL(url), content::Referrer(), NEW_FOREGROUND_TAB,
1067 content::PAGE_TRANSITION_LINK, false); 1024 content::PAGE_TRANSITION_LINK, false);
1068 content::WebContents* inspected_web_contents = GetInspectedWebContents(); 1025 content::WebContents* inspected_web_contents = GetInspectedWebContents();
1069 if (inspected_web_contents) { 1026 if (inspected_web_contents) {
1070 inspected_web_contents->OpenURL(params); 1027 inspected_web_contents->OpenURL(params);
(...skipping 205 matching lines...) Expand 10 before | Expand all | Expand 10 after
1276 base::FundamentalValue request_id_value(request_id); 1233 base::FundamentalValue request_id_value(request_id);
1277 base::StringValue file_system_path_value(file_system_path); 1234 base::StringValue file_system_path_value(file_system_path);
1278 CallClientFunction("InspectorFrontendAPI.searchCompleted", &request_id_value, 1235 CallClientFunction("InspectorFrontendAPI.searchCompleted", &request_id_value,
1279 &file_system_path_value, &file_paths_value); 1236 &file_system_path_value, &file_paths_value);
1280 } 1237 }
1281 1238
1282 void DevToolsWindow::ShowDevToolsConfirmInfoBar( 1239 void DevToolsWindow::ShowDevToolsConfirmInfoBar(
1283 const base::string16& message, 1240 const base::string16& message,
1284 const InfoBarCallback& callback) { 1241 const InfoBarCallback& callback) {
1285 DevToolsConfirmInfoBarDelegate::Create( 1242 DevToolsConfirmInfoBarDelegate::Create(
1286 IsDocked() ? 1243 is_docked_ ?
1287 InfoBarService::FromWebContents(GetInspectedWebContents()) : 1244 InfoBarService::FromWebContents(GetInspectedWebContents()) :
1288 InfoBarService::FromWebContents(web_contents_), 1245 InfoBarService::FromWebContents(web_contents_),
1289 callback, message); 1246 callback, message);
1290 } 1247 }
1291 1248
1292 void DevToolsWindow::CreateDevToolsBrowser() { 1249 void DevToolsWindow::CreateDevToolsBrowser() {
1293 std::string wp_key = GetDevToolsWindowPlacementPrefKey(); 1250 std::string wp_key = GetDevToolsWindowPlacementPrefKey();
1294 PrefService* prefs = profile_->GetPrefs(); 1251 PrefService* prefs = profile_->GetPrefs();
1295 const base::DictionaryValue* wp_pref = prefs->GetDictionary(wp_key.c_str()); 1252 const base::DictionaryValue* wp_pref = prefs->GetDictionary(wp_key.c_str());
1296 if (!wp_pref || wp_pref->empty()) { 1253 if (!wp_pref || wp_pref->empty()) {
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
1333 } 1290 }
1334 1291
1335 BrowserWindow* DevToolsWindow::GetInspectedBrowserWindow() { 1292 BrowserWindow* DevToolsWindow::GetInspectedBrowserWindow() {
1336 Browser* browser = NULL; 1293 Browser* browser = NULL;
1337 int tab; 1294 int tab;
1338 return FindInspectedBrowserAndTabIndex(GetInspectedWebContents(), 1295 return FindInspectedBrowserAndTabIndex(GetInspectedWebContents(),
1339 &browser, &tab) ? 1296 &browser, &tab) ?
1340 browser->window() : NULL; 1297 browser->window() : NULL;
1341 } 1298 }
1342 1299
1343 bool DevToolsWindow::IsInspectedBrowserPopup() { 1300 void DevToolsWindow::DoAction(const DevToolsToggleAction& action) {
1344 Browser* browser = NULL; 1301 switch (action.type()) {
1345 int tab;
1346 return FindInspectedBrowserAndTabIndex(GetInspectedWebContents(),
1347 &browser, &tab) &&
1348 browser->is_type_popup();
1349 }
1350
1351 void DevToolsWindow::UpdateFrontendDockSide() {
1352 base::StringValue dock_side(SideToString(dock_side_));
1353 CallClientFunction("InspectorFrontendAPI.setDockSide", &dock_side, NULL,
1354 NULL);
1355 base::FundamentalValue docked(IsDocked());
1356 CallClientFunction("InspectorFrontendAPI.setAttachedWindow", &docked, NULL,
1357 NULL);
1358 }
1359
1360 void DevToolsWindow::ScheduleAction(const DevToolsToggleAction& action) {
1361 action_on_load_ = action;
1362 if (is_loaded_)
1363 DoAction();
1364 }
1365
1366 void DevToolsWindow::DoAction() {
1367 UpdateFrontendDockSide();
1368 switch (action_on_load_.type()) {
1369 case DevToolsToggleAction::kShowConsole: 1302 case DevToolsToggleAction::kShowConsole:
1370 CallClientFunction("InspectorFrontendAPI.showConsole", NULL, NULL, NULL); 1303 CallClientFunction("InspectorFrontendAPI.showConsole", NULL, NULL, NULL);
1371 break; 1304 break;
1372 1305
1373 case DevToolsToggleAction::kInspect: 1306 case DevToolsToggleAction::kInspect:
1374 CallClientFunction("InspectorFrontendAPI.enterInspectElementMode", NULL, 1307 CallClientFunction("InspectorFrontendAPI.enterInspectElementMode", NULL,
1375 NULL, NULL); 1308 NULL, NULL);
1376 break; 1309 break;
1377 1310
1378 case DevToolsToggleAction::kShow: 1311 case DevToolsToggleAction::kShow:
1379 case DevToolsToggleAction::kToggle: 1312 case DevToolsToggleAction::kToggle:
1380 // Do nothing. 1313 // Do nothing.
1381 break; 1314 break;
1382 1315
1383 case DevToolsToggleAction::kReveal: { 1316 case DevToolsToggleAction::kReveal: {
1384 const DevToolsToggleAction::RevealParams* params = 1317 const DevToolsToggleAction::RevealParams* params =
1385 action_on_load_.params(); 1318 action.params();
1386 CHECK(params); 1319 CHECK(params);
1387 base::StringValue url_value(params->url); 1320 base::StringValue url_value(params->url);
1388 base::FundamentalValue line_value(static_cast<int>(params->line_number)); 1321 base::FundamentalValue line_value(static_cast<int>(params->line_number));
1389 base::FundamentalValue column_value( 1322 base::FundamentalValue column_value(
1390 static_cast<int>(params->column_number)); 1323 static_cast<int>(params->column_number));
1391 CallClientFunction("InspectorFrontendAPI.revealSourceLine", 1324 CallClientFunction("InspectorFrontendAPI.revealSourceLine",
1392 &url_value, 1325 &url_value,
1393 &line_value, 1326 &line_value,
1394 &column_value); 1327 &column_value);
1395 break; 1328 break;
1396 } 1329 }
1397 default: 1330 default:
1398 NOTREACHED(); 1331 NOTREACHED();
1399 break; 1332 break;
1400 } 1333 }
1401 action_on_load_ = DevToolsToggleAction::Show();
1402 } 1334 }
1403 1335
1404 void DevToolsWindow::UpdateTheme() { 1336 void DevToolsWindow::UpdateTheme() {
1405 ThemeService* tp = ThemeServiceFactory::GetForProfile(profile_); 1337 ThemeService* tp = ThemeServiceFactory::GetForProfile(profile_);
1406 DCHECK(tp); 1338 DCHECK(tp);
1407 1339
1408 std::string command("InspectorFrontendAPI.setToolbarColors(\"" + 1340 std::string command("InspectorFrontendAPI.setToolbarColors(\"" +
1409 SkColorToRGBAString(tp->GetColor(ThemeProperties::COLOR_TOOLBAR)) + 1341 SkColorToRGBAString(tp->GetColor(ThemeProperties::COLOR_TOOLBAR)) +
1410 "\", \"" + 1342 "\", \"" +
1411 SkColorToRGBAString(tp->GetColor(ThemeProperties::COLOR_BOOKMARK_TEXT)) + 1343 SkColorToRGBAString(tp->GetColor(ThemeProperties::COLOR_BOOKMARK_TEXT)) +
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
1476 web_contents_->GetRenderViewHost()->ExecuteJavascriptInWebFrame( 1408 web_contents_->GetRenderViewHost()->ExecuteJavascriptInWebFrame(
1477 base::string16(), javascript); 1409 base::string16(), javascript);
1478 } 1410 }
1479 1411
1480 void DevToolsWindow::UpdateBrowserToolbar() { 1412 void DevToolsWindow::UpdateBrowserToolbar() {
1481 BrowserWindow* inspected_window = GetInspectedBrowserWindow(); 1413 BrowserWindow* inspected_window = GetInspectedBrowserWindow();
1482 if (inspected_window) 1414 if (inspected_window)
1483 inspected_window->UpdateToolbar(NULL); 1415 inspected_window->UpdateToolbar(NULL);
1484 } 1416 }
1485 1417
1486 bool DevToolsWindow::IsDocked() {
1487 return dock_side_ != DEVTOOLS_DOCK_SIDE_UNDOCKED;
1488 }
1489
1490 void DevToolsWindow::Restore() {
1491 if (dock_side_ == DEVTOOLS_DOCK_SIDE_MINIMIZED)
1492 SetDockSide(SideToString(dock_side_before_minimized_));
1493 }
1494
1495 content::WebContents* DevToolsWindow::GetInspectedWebContents() { 1418 content::WebContents* DevToolsWindow::GetInspectedWebContents() {
1496 return inspected_contents_observer_ ? 1419 return inspected_contents_observer_ ?
1497 inspected_contents_observer_->web_contents() : NULL; 1420 inspected_contents_observer_->web_contents() : NULL;
1498 } 1421 }
1499 1422
1500 void DevToolsWindow::DocumentOnLoadCompletedInMainFrame() { 1423 void DevToolsWindow::DocumentOnLoadCompletedInMainFrame() {
1501 is_loaded_ = true; 1424 load_state_mask_ |= kOnLoadFired;
1425 if (load_state_mask_ == kLoadCompleted)
1426 LoadCompleted();
1427 }
1428
1429 void DevToolsWindow::LoadCompleted() {
1430 Show(action_on_load_);
1431 action_on_load_ = DevToolsToggleAction::Nothing();
1502 UpdateTheme(); 1432 UpdateTheme();
1503 DoAction();
1504 AddDevToolsExtensionsToClient(); 1433 AddDevToolsExtensionsToClient();
1434 if (set_is_docked_for_test_on_load_) {
1435 set_is_docked_for_test_on_load_ = false;
1436 base::FundamentalValue docked(is_docked_);
1437 CallClientFunction("InspectorFrontendAPI.setIsDocked", &docked, NULL, NULL);
1438 }
1505 } 1439 }
OLDNEW
« no previous file with comments | « chrome/browser/devtools/devtools_window.h ('k') | chrome/browser/extensions/api/app_window/app_window_api.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698