| 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());
|
| + }
|
| +}
|
| +
|
| +
|
|
|