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

Side by Side Diff: chrome/browser/ui/views/frame/browser_view.cc

Issue 1091703002: Eliminate faux-RTTI code from BrowserView. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Revert to patch set 2 Created 5 years, 8 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
« no previous file with comments | « chrome/browser/ui/views/frame/browser_view.h ('k') | chrome/test/base/test_browser_window.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 The Chromium Authors. All rights reserved. 1 // Copyright 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/ui/views/frame/browser_view.h" 5 #include "chrome/browser/ui/views/frame/browser_view.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/auto_reset.h" 9 #include "base/auto_reset.h"
10 #include "base/command_line.h" 10 #include "base/command_line.h"
(...skipping 1443 matching lines...) Expand 10 before | Expand all | Expand 10 after
1454 GetFocusManager()); 1454 GetFocusManager());
1455 } 1455 }
1456 1456
1457 // TODO(devint): http://b/issue?id=1117225 Cut, Copy, and Paste are always 1457 // TODO(devint): http://b/issue?id=1117225 Cut, Copy, and Paste are always
1458 // enabled in the page menu regardless of whether the command will do 1458 // enabled in the page menu regardless of whether the command will do
1459 // anything. When someone selects the menu item, we just act as if they hit 1459 // anything. When someone selects the menu item, we just act as if they hit
1460 // the keyboard shortcut for the command by sending the associated key press 1460 // the keyboard shortcut for the command by sending the associated key press
1461 // to windows. The real fix to this bug is to disable the commands when they 1461 // to windows. The real fix to this bug is to disable the commands when they
1462 // won't do anything. We'll need something like an overall clipboard command 1462 // won't do anything. We'll need something like an overall clipboard command
1463 // manager to do that. 1463 // manager to do that.
1464 void BrowserView::Cut() { 1464 void BrowserView::CutCopyPaste(int command_id) {
1465 // If a WebContent is focused, call WebContents::Cut. Otherwise, e.g. if 1465 // If a WebContents is focused, call its member method.
1466 // Omnibox is focused, send a Ctrl+x key event to Chrome. Using RWH interface 1466 WebContents* contents = browser_->tab_strip_model()->GetActiveWebContents();
1467 // rather than the fake key event for a WebContent is important since the fake 1467 if (contents) {
1468 // event might be consumed by the web content (crbug.com/137908). 1468 void (WebContents::*method)();
1469 DoCutCopyPaste(&content::WebContents::Cut, IDS_APP_CUT); 1469 if (command_id == IDC_CUT)
1470 } 1470 method = &content::WebContents::Cut;
1471 else if (command_id == IDC_COPY)
1472 method = &content::WebContents::Copy;
1473 else
1474 method = &content::WebContents::Paste;
1475 if (DoCutCopyPasteForWebContents(contents, method))
1476 return;
1471 1477
1472 void BrowserView::Copy() { 1478 WebContents* devtools =
1473 DoCutCopyPaste(&content::WebContents::Copy, IDS_APP_COPY); 1479 DevToolsWindow::GetInTabWebContents(contents, nullptr);
1474 } 1480 if (devtools && DoCutCopyPasteForWebContents(devtools, method))
1481 return;
1482 }
1475 1483
1476 void BrowserView::Paste() { 1484 // Execute the command on the focused view, if possible, by calling
1477 DoCutCopyPaste(&content::WebContents::Paste, IDS_APP_PASTE); 1485 // AcceleratorPressed(). Textfields override this to translate and execute
1486 // the provided accelerator.
1487 views::View* focused = GetFocusManager()->GetFocusedView();
1488 if (focused->CanHandleAccelerators()) {
1489 ui::Accelerator accelerator;
1490 GetAccelerator(command_id, &accelerator);
1491 focused->AcceleratorPressed(accelerator);
1492 }
1478 } 1493 }
1479 1494
1480 WindowOpenDisposition BrowserView::GetDispositionForPopupBounds( 1495 WindowOpenDisposition BrowserView::GetDispositionForPopupBounds(
1481 const gfx::Rect& bounds) { 1496 const gfx::Rect& bounds) {
1482 return NEW_POPUP; 1497 return NEW_POPUP;
1483 } 1498 }
1484 1499
1485 FindBar* BrowserView::CreateFindBar() { 1500 FindBar* BrowserView::CreateFindBar() {
1486 return chrome::CreateFindBar(this); 1501 return chrome::CreateFindBar(this);
1487 } 1502 }
(...skipping 1019 matching lines...) Expand 10 before | Expand all | Expand 10 after
2507 void BrowserView::ExecuteExtensionCommand( 2522 void BrowserView::ExecuteExtensionCommand(
2508 const extensions::Extension* extension, 2523 const extensions::Extension* extension,
2509 const extensions::Command& command) { 2524 const extensions::Command& command) {
2510 toolbar_->ExecuteExtensionCommand(extension, command); 2525 toolbar_->ExecuteExtensionCommand(extension, command);
2511 } 2526 }
2512 2527
2513 ExclusiveAccessContext* BrowserView::GetExclusiveAccessContext() { 2528 ExclusiveAccessContext* BrowserView::GetExclusiveAccessContext() {
2514 return this; 2529 return this;
2515 } 2530 }
2516 2531
2517 void BrowserView::DoCutCopyPaste(void (WebContents::*method)(),
2518 int command_id) {
2519 WebContents* contents = browser_->tab_strip_model()->GetActiveWebContents();
2520 if (!contents)
2521 return;
2522 if (DoCutCopyPasteForWebContents(contents, method))
2523 return;
2524
2525 WebContents* devtools = DevToolsWindow::GetInTabWebContents(contents,
2526 nullptr);
2527 if (devtools && DoCutCopyPasteForWebContents(devtools, method))
2528 return;
2529
2530 views::FocusManager* focus_manager = GetFocusManager();
2531 views::View* focused = focus_manager->GetFocusedView();
2532 if (focused &&
2533 (!strcmp(focused->GetClassName(), views::Textfield::kViewClassName) ||
2534 !strcmp(focused->GetClassName(), OmniboxViewViews::kViewClassName))) {
2535 views::Textfield* textfield = static_cast<views::Textfield*>(focused);
2536 textfield->ExecuteCommand(command_id);
2537 }
2538 }
2539
2540 bool BrowserView::DoCutCopyPasteForWebContents( 2532 bool BrowserView::DoCutCopyPasteForWebContents(
2541 WebContents* contents, 2533 WebContents* contents,
2542 void (WebContents::*method)()) { 2534 void (WebContents::*method)()) {
2535 // Using RWH interface rather than a fake key event for a WebContent is
2536 // important since a fake event might be consumed by the web content.
2543 if (contents->GetRenderWidgetHostView()->HasFocus()) { 2537 if (contents->GetRenderWidgetHostView()->HasFocus()) {
2544 (contents->*method)(); 2538 (contents->*method)();
2545 return true; 2539 return true;
2546 } 2540 }
2547 2541
2548 return false; 2542 return false;
2549 } 2543 }
2550 2544
2551 void BrowserView::ActivateAppModalDialog() const { 2545 void BrowserView::ActivateAppModalDialog() const {
2552 // If another browser is app modal, flash and activate the modal browser. 2546 // If another browser is app modal, flash and activate the modal browser.
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
2612 return immersive_mode_controller()->IsEnabled(); 2606 return immersive_mode_controller()->IsEnabled();
2613 } 2607 }
2614 2608
2615 views::Widget* BrowserView::GetBubbleAssociatedWidget() { 2609 views::Widget* BrowserView::GetBubbleAssociatedWidget() {
2616 return GetWidget(); 2610 return GetWidget();
2617 } 2611 }
2618 2612
2619 gfx::Rect BrowserView::GetTopContainerBoundsInScreen() { 2613 gfx::Rect BrowserView::GetTopContainerBoundsInScreen() {
2620 return top_container_->GetBoundsInScreen(); 2614 return top_container_->GetBoundsInScreen();
2621 } 2615 }
OLDNEW
« no previous file with comments | « chrome/browser/ui/views/frame/browser_view.h ('k') | chrome/test/base/test_browser_window.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698