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

Unified Diff: chrome/browser/ui/panels/panel_browser_window.cc

Issue 10411036: Separate BrowserWindow from Panel class. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix mac unit_tests compile Created 8 years, 7 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/ui/panels/panel_browser_window.cc
diff --git a/chrome/browser/ui/panels/panel_browser_window.cc b/chrome/browser/ui/panels/panel_browser_window.cc
new file mode 100644
index 0000000000000000000000000000000000000000..57f8b20fd50fa17fe367feff76a07f5b69a25274
--- /dev/null
+++ b/chrome/browser/ui/panels/panel_browser_window.cc
@@ -0,0 +1,481 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/ui/panels/panel_browser_window.h"
+
+#include "base/logging.h"
+#include "chrome/browser/ui/browser.h"
+#include "chrome/browser/ui/browser_finder.h"
+#include "chrome/browser/ui/panels/panel.h"
+#include "chrome/browser/ui/panels/native_panel.h"
+#include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h"
+#include "chrome/browser/ui/tabs/tab_strip_model.h"
+#include "chrome/browser/ui/window_sizer.h"
+#include "content/public/browser/web_contents.h"
+#include "ui/gfx/rect.h"
+
+#if defined(USE_AURA)
+#include "chrome/browser/ui/panels/panel_browser_view.h"
+#endif
+
+using content::NativeWebKeyboardEvent;
+using content::SSLStatus;
+using content::WebContents;
+
+PanelBrowserWindow::PanelBrowserWindow(Browser* browser, Panel* panel,
+ NativePanel* native_panel)
+ : browser_(browser),
+ panel_(panel),
+ native_panel_(native_panel) {
+ browser_->tab_strip_model()->AddObserver(this);
+}
+
+PanelBrowserWindow::~PanelBrowserWindow() {
+ browser_->tab_strip_model()->RemoveObserver(this);
+ // Invoked by native panel destructor via panel destructor.
+ // Do not access native_panel_ nor panel_ here.
+}
+
+// ----------------------------------------------
+// BaseWindow interface - just delegates to Panel
+// ----------------------------------------------
+bool PanelBrowserWindow::IsActive() const {
+ return panel_->IsActive();
+}
+
+bool PanelBrowserWindow::IsMaximized() const {
+ return panel_->IsMaximized();
+}
+
+bool PanelBrowserWindow::IsMinimized() const {
+ return panel_->IsMinimized();
+}
+
+bool PanelBrowserWindow::IsFullscreen() const {
+ return panel_->IsFullscreen();
+}
+
+gfx::Rect PanelBrowserWindow::GetRestoredBounds() const {
+ return panel_->GetRestoredBounds();
+}
+
+gfx::Rect PanelBrowserWindow::GetBounds() const {
+ return panel_->GetBounds();
+}
+
+void PanelBrowserWindow::Show() {
+ panel_->Show();
+}
+
+void PanelBrowserWindow::ShowInactive() {
+ panel_->ShowInactive();
+}
+
+void PanelBrowserWindow::Close() {
+ panel_->Close();
+}
+
+void PanelBrowserWindow::Activate() {
+ panel_->Activate();
+}
+
+void PanelBrowserWindow::Deactivate() {
+ panel_->Deactivate();
+}
+
+void PanelBrowserWindow::Maximize() {
+ panel_->Maximize();
+}
+
+void PanelBrowserWindow::Minimize() {
+ panel_->Minimize();
+}
+
+void PanelBrowserWindow::Restore() {
+ panel_->Restore();
+}
+
+void PanelBrowserWindow::SetBounds(const gfx::Rect& bounds) {
+ panel_->SetBounds(bounds);
+}
+
+void PanelBrowserWindow::SetDraggableRegion(SkRegion* region) {
+ panel_->SetDraggableRegion(region);
+}
+
+void PanelBrowserWindow::FlashFrame(bool flash) {
+ panel_->FlashFrame(flash);
+}
+
+bool PanelBrowserWindow::IsAlwaysOnTop() const {
+ return panel_->IsAlwaysOnTop();
+}
+
+// ------------------------------------------------------------
+// BrowserWindow interface - either does nothing, delegates to
+// native panel, delegates to Panel (WebContents handling)
+// or invoke logic that has nothing to do with panels (GetDownloadShelf).
+// -----------------------------------------------------------
+gfx::NativeWindow PanelBrowserWindow::GetNativeHandle() {
+ return native_panel_->GetNativePanelHandle();
+}
+
+BrowserWindowTesting* PanelBrowserWindow::GetBrowserWindowTesting() {
+ NOTIMPLEMENTED();
+ return NULL;
+}
+
+StatusBubble* PanelBrowserWindow::GetStatusBubble() {
+ // TODO(jennb): Implement. http://crbug.com/102723
+ return NULL;
+}
+
+void PanelBrowserWindow::ToolbarSizeChanged(bool is_animating) {
+ NOTIMPLEMENTED();
+}
+
+void PanelBrowserWindow::UpdateTitleBar() {
+ native_panel_->UpdatePanelTitleBar();
+}
+
+void PanelBrowserWindow::BookmarkBarStateChanged(
+ BookmarkBar::AnimateChangeType change_type) {
+ NOTIMPLEMENTED();
+}
+
+void PanelBrowserWindow::UpdateDevTools() {
+ NOTIMPLEMENTED();
+}
+
+void PanelBrowserWindow::SetDevToolsDockSide(DevToolsDockSide side) {
+ NOTIMPLEMENTED();
+}
+
+void PanelBrowserWindow::UpdateLoadingAnimations(bool should_animate) {
+ native_panel_->UpdatePanelLoadingAnimations(should_animate);
+}
+
+void PanelBrowserWindow::SetStarredState(bool is_starred) {
+ // Since panels are typically not bookmarked extension UI windows, they don't
+ // have starred state.
+}
+
+void PanelBrowserWindow::EnterFullscreen(
+ const GURL& url, FullscreenExitBubbleType type) {
+ NOTIMPLEMENTED();
+}
+
+void PanelBrowserWindow::ExitFullscreen() {
+ NOTIMPLEMENTED();
+}
+
+void PanelBrowserWindow::UpdateFullscreenExitBubbleContent(
+ const GURL& url,
+ FullscreenExitBubbleType bubble_type) {
+ NOTIMPLEMENTED();
+}
+
+bool PanelBrowserWindow::IsFullscreenBubbleVisible() const {
+ NOTIMPLEMENTED();
+ return false;
+}
+
+LocationBar* PanelBrowserWindow::GetLocationBar() const {
+#if defined(USE_AURA)
+ // TODO(stevenjb): Remove this when Aura panels are implemented post R18.
+ PanelBrowserView* panel_view = static_cast<PanelBrowserView*>(native_panel_);
+ return panel_view->GetLocationBar();
+#else
+ // Panels do not have a location bar.
+ return NULL;
+#endif
+}
+
+void PanelBrowserWindow::SetFocusToLocationBar(bool select_all) {
+#if defined(USE_AURA)
+ // TODO(stevenjb): Remove this when Aura panels are implemented post R18.
+ PanelBrowserView* panel_view = static_cast<PanelBrowserView*>(native_panel_);
+ panel_view->SetFocusToLocationBar(select_all);
+#else
+ // Panels do not have a location bar.
+#endif
+}
+
+void PanelBrowserWindow::UpdateReloadStopState(bool is_loading, bool force) {
+ // Panels don't have stop/reload indicator.
+}
+
+void PanelBrowserWindow::UpdateToolbar(TabContentsWrapper* contents,
+ bool should_restore_state) {
+ // Panels do not have a toolbar.
+}
+
+void PanelBrowserWindow::FocusToolbar() {
+ // Panels do not have a toolbar.
+}
+
+void PanelBrowserWindow::FocusAppMenu() {
+ NOTIMPLEMENTED();
+}
+
+void PanelBrowserWindow::FocusBookmarksToolbar() {
+ NOTIMPLEMENTED();
+}
+
+void PanelBrowserWindow::RotatePaneFocus(bool forwards) {
+ NOTIMPLEMENTED();
+}
+
+bool PanelBrowserWindow::IsBookmarkBarVisible() const {
+ return false;
+}
+
+bool PanelBrowserWindow::IsBookmarkBarAnimating() const {
+ return false;
+}
+
+// This is used by extensions to decide if a window can be closed.
+// Always return true as panels do not have tabs that can be dragged,
+// during which extensions will avoid closing a window.
+bool PanelBrowserWindow::IsTabStripEditable() const {
+ return true;
+}
+
+bool PanelBrowserWindow::IsToolbarVisible() const {
+ NOTIMPLEMENTED();
+ return false;
+}
+
+gfx::Rect PanelBrowserWindow::GetRootWindowResizerRect() const {
+ return gfx::Rect();
+}
+
+bool PanelBrowserWindow::IsPanel() const {
+ return true;
+}
+
+void PanelBrowserWindow::DisableInactiveFrame() {
+ NOTIMPLEMENTED();
+}
+
+void PanelBrowserWindow::ConfirmAddSearchProvider(TemplateURL* template_url,
+ Profile* profile) {
+ NOTIMPLEMENTED();
+}
+
+void PanelBrowserWindow::ToggleBookmarkBar() {
+ NOTIMPLEMENTED();
+}
+
+void PanelBrowserWindow::ShowAboutChromeDialog() {
+ NOTIMPLEMENTED();
+}
+
+void PanelBrowserWindow::ShowUpdateChromeDialog() {
+ NOTIMPLEMENTED();
+}
+
+void PanelBrowserWindow::ShowTaskManager() {
+ native_panel_->ShowTaskManagerForPanel();
+}
+
+void PanelBrowserWindow::ShowBackgroundPages() {
+ NOTIMPLEMENTED();
+}
+
+void PanelBrowserWindow::ShowBookmarkBubble(const GURL& url,
+ bool already_bookmarked) {
+ NOTIMPLEMENTED();
+}
+
+void PanelBrowserWindow::ShowChromeToMobileBubble() {
+ NOTIMPLEMENTED();
+}
+
+#if defined(ENABLE_ONE_CLICK_SIGNIN)
+void PanelBrowserWindow::ShowOneClickSigninBubble(
+ const base::Closure& learn_more_callback,
+ const base::Closure& advanced_callback) {
+ NOTIMPLEMENTED();
+}
+#endif
+
+bool PanelBrowserWindow::IsDownloadShelfVisible() const {
+ return false;
+}
+
+DownloadShelf* PanelBrowserWindow::GetDownloadShelf() {
+ Profile* profile = browser_->profile();
+ Browser* tabbed_browser = browser::FindTabbedBrowser(profile, true);
+
+ if (!tabbed_browser) {
+ // Set initial bounds so window will not be positioned at an offset
+ // to this panel as panels are at the bottom of the screen.
+ gfx::Rect window_bounds;
+ WindowSizer::GetBrowserWindowBounds(std::string(), gfx::Rect(),
+ browser_, &window_bounds);
+ Browser::CreateParams params(Browser::TYPE_TABBED, profile);
+ params.initial_bounds = window_bounds;
+ tabbed_browser = Browser::CreateWithParams(params);
+ tabbed_browser->NewTab();
+ }
+
+ tabbed_browser->window()->Show(); // Ensure download shelf is visible.
+ return tabbed_browser->window()->GetDownloadShelf();
+}
+
+void PanelBrowserWindow::ConfirmBrowserCloseWithPendingDownloads() {
+ NOTIMPLEMENTED();
+}
+
+void PanelBrowserWindow::UserChangedTheme() {
+ native_panel_->NotifyPanelOnUserChangedTheme();
+}
+
+int PanelBrowserWindow::GetExtraRenderViewHeight() const {
+ // This is currently used only on Linux and that returns the height for
+ // optional elements like bookmark bar, download bar etc. Not applicable to
+ // panels.
+ return 0;
+}
+
+void PanelBrowserWindow::WebContentsFocused(WebContents* contents) {
+ native_panel_->PanelWebContentsFocused(contents);
+}
+
+void PanelBrowserWindow::ShowPageInfo(Profile* profile,
+ const GURL& url,
+ const SSLStatus& ssl,
+ bool show_history) {
+ NOTIMPLEMENTED();
+}
+void PanelBrowserWindow::ShowWebsiteSettings(
+ Profile* profile,
+ TabContentsWrapper* tab_contents_wrapper,
+ const GURL& url,
+ const content::SSLStatus& ssl,
+ bool show_history) {
+ NOTIMPLEMENTED();
+}
+
+void PanelBrowserWindow::ShowAppMenu() {
+ NOTIMPLEMENTED();
+}
+
+bool PanelBrowserWindow::PreHandleKeyboardEvent(
+ const content::NativeWebKeyboardEvent& event,
+ bool* is_keyboard_shortcut) {
+ return native_panel_->PreHandlePanelKeyboardEvent(event,
+ is_keyboard_shortcut);
+}
+
+void PanelBrowserWindow::HandleKeyboardEvent(
+ const content::NativeWebKeyboardEvent& event) {
+ native_panel_->HandlePanelKeyboardEvent(event);
+}
+
+void PanelBrowserWindow::ShowCreateWebAppShortcutsDialog(
+ TabContentsWrapper* tab_contents) {
+ NOTIMPLEMENTED();
+}
+
+void PanelBrowserWindow::ShowCreateChromeAppShortcutsDialog(
+ Profile* profile,
+ const extensions::Extension* app) {
+ NOTIMPLEMENTED();
+}
+
+void PanelBrowserWindow::Cut() {
+ native_panel_->PanelCut();
+}
+
+void PanelBrowserWindow::Copy() {
+ native_panel_->PanelCopy();
+}
+
+void PanelBrowserWindow::Paste() {
+ native_panel_->PanelPaste();
+}
+
+#if defined(OS_MACOSX)
+void PanelBrowserWindow::OpenTabpose() {
+ NOTIMPLEMENTED();
+}
+
+void PanelBrowserWindow::EnterPresentationMode(
+ const GURL& url,
+ FullscreenExitBubbleType content_type) {
+ NOTIMPLEMENTED();
+}
+
+void PanelBrowserWindow::ExitPresentationMode() {
+ NOTIMPLEMENTED();
+}
+
+bool PanelBrowserWindow::InPresentationMode() {
+ NOTIMPLEMENTED();
+ return false;
+}
+#endif
+
+void PanelBrowserWindow::ShowInstant(TabContentsWrapper* preview) {
+ NOTIMPLEMENTED();
+}
+
+void PanelBrowserWindow::HideInstant() {
+ NOTIMPLEMENTED();
+}
+
+gfx::Rect PanelBrowserWindow::GetInstantBounds() {
+ NOTIMPLEMENTED();
+ return gfx::Rect();
+}
+
+WindowOpenDisposition PanelBrowserWindow::GetDispositionForPopupBounds(
+ const gfx::Rect& bounds) {
+#if defined(USE_AURA)
+ // TODO(stevenjb): Remove this when Aura panels are implemented post R18.
+ PanelBrowserView* panel_view = static_cast<PanelBrowserView*>(native_panel_);
+ return panel_view->GetDispositionForPopupBounds(bounds);
+#else
+ return NEW_POPUP;
+#endif
+}
+
+FindBar* PanelBrowserWindow::CreateFindBar() {
+ return native_panel_->CreatePanelFindBar();
+}
+
+void PanelBrowserWindow::ResizeDueToAutoResize(WebContents* web_contents,
+ const gfx::Size& pref_size) {
+ DCHECK(panel_->auto_resizable());
+ return panel_->OnWindowAutoResized(
+ native_panel_->WindowSizeFromContentSize(pref_size));
+}
+
+void PanelBrowserWindow::ShowAvatarBubble(WebContents* web_contents,
+ const gfx::Rect& rect) {
+ // Panels will never show a new tab page so this should never be called.
+ NOTREACHED();
+}
+
+void PanelBrowserWindow::ShowAvatarBubbleFromAvatarButton() {
+ // Panels will never show an avatar button so this should never be called.
+ NOTREACHED();
+}
+
+void PanelBrowserWindow::DestroyBrowser() {
+ native_panel_->DestroyPanelBrowser();
+}
+
+void PanelBrowserWindow::TabInsertedAt(TabContentsWrapper* contents,
+ int index,
+ bool foreground) {
+ if (panel_->auto_resizable()) {
+ DCHECK_EQ(0, index);
+ panel_->EnableWebContentsAutoResize(contents->web_contents());
+ }
+}
+
+

Powered by Google App Engine
This is Rietveld 408576698