Commit 2b428251 authored by moshayedi's avatar moshayedi Committed by Commit bot

Implement initial version of browser frame for Aura Android.

This implementation assumes that we have only one root window.

We will need to change ChromeBrowserMainExtraPartsViews::ToolkitInitialized() to call SetHost() to make this CL work.

BUG=550423

Review URL: https://codereview.chromium.org/1410153003

Cr-Commit-Position: refs/heads/master@{#357623}
parent 15884ad4
// Copyright 2015 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/views/frame/browser_frame_android.h"
#include "chrome/browser/ui/views/frame/browser_shutdown.h"
#include "chrome/browser/ui/views/frame/browser_view.h"
#include "ui/aura/window.h"
#include "ui/aura/window_tree_host_platform.h"
///////////////////////////////////////////////////////////////////////////////
// BrowserFrameAndroid, public:
// static
const char BrowserFrameAndroid::kWindowName[] = "BrowserFrameAndroid";
namespace {
// |g_host| should be set before browser frame instantiation. It is used to get
// the window which is needed for creating the widget for the browser frame.
// TODO(moshayedi): crbug.com/551055. This is temporary until we have
// multi-window support.
aura::WindowTreeHostPlatform* g_host = nullptr;
}
BrowserFrameAndroid::BrowserFrameAndroid(BrowserFrame* browser_frame,
BrowserView* browser_view)
: views::NativeWidgetAura(browser_frame), browser_view_(browser_view) {
GetNativeWindow()->SetName(kWindowName);
}
// static
void BrowserFrameAndroid::SetHost(aura::WindowTreeHostPlatform* host) {
g_host = host;
}
///////////////////////////////////////////////////////////////////////////////
// BrowserFrameAndroid, views::NativeWidgetAura overrides:
void BrowserFrameAndroid::OnWindowDestroying(aura::Window* window) {
// Destroy any remaining WebContents early on. Doing so may result in
// calling back to one of the Views/LayoutManagers or supporting classes of
// BrowserView. By destroying here we ensure all said classes are valid.
DestroyBrowserWebContents(browser_view_->browser());
NativeWidgetAura::OnWindowDestroying(window);
}
////////////////////////////////////////////////////////////////////////////////
// BrowserFrameAndroid, NativeBrowserFrame implementation:
views::Widget::InitParams BrowserFrameAndroid::GetWidgetParams() {
DCHECK(g_host);
views::Widget::InitParams params;
params.native_widget = this;
params.context = g_host->window();
return params;
}
bool BrowserFrameAndroid::UseCustomFrame() const {
return true;
}
bool BrowserFrameAndroid::UsesNativeSystemMenu() const {
return false;
}
int BrowserFrameAndroid::GetMinimizeButtonOffset() const {
return 0;
}
bool BrowserFrameAndroid::ShouldSaveWindowPlacement() const {
return false;
}
void BrowserFrameAndroid::GetWindowPlacement(
gfx::Rect* bounds,
ui::WindowShowState* show_state) const {}
BrowserFrameAndroid::~BrowserFrameAndroid() {}
// Copyright 2015 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.
#ifndef CHROME_BROWSER_UI_VIEWS_FRAME_BROWSER_FRAME_ANDROID_H_
#define CHROME_BROWSER_UI_VIEWS_FRAME_BROWSER_FRAME_ANDROID_H_
#include "base/basictypes.h"
#include "base/memory/scoped_ptr.h"
#include "chrome/browser/ui/views/frame/native_browser_frame.h"
#include "ui/aura/window_tree_host_platform.h"
#include "ui/views/widget/native_widget_aura.h"
class BrowserFrame;
class BrowserView;
////////////////////////////////////////////////////////////////////////////////
// BrowserFrameAndroid
//
// BrowserFrameAndroid is a NativeWidgetAura subclass that provides the window
// frame for the Chrome browser window.
//
class BrowserFrameAndroid : public views::NativeWidgetAura,
public NativeBrowserFrame {
public:
static const char kWindowName[];
BrowserFrameAndroid(BrowserFrame* browser_frame, BrowserView* browser_view);
BrowserView* browser_view() const { return browser_view_; }
// Must be called before the browser frame is created.
static void SetHost(aura::WindowTreeHostPlatform* host);
protected:
// Overridden from views::NativeWidgetAura:
void OnWindowDestroying(aura::Window* window) override;
// Overridden from NativeBrowserFrame:
views::Widget::InitParams GetWidgetParams() override;
bool UseCustomFrame() const override;
bool UsesNativeSystemMenu() const override;
int GetMinimizeButtonOffset() const override;
bool ShouldSaveWindowPlacement() const override;
void GetWindowPlacement(gfx::Rect* bounds,
ui::WindowShowState* show_state) const override;
~BrowserFrameAndroid() override;
private:
class WindowPropertyWatcher;
// The BrowserView is our ClientView. This is a pointer to it.
BrowserView* browser_view_;
DISALLOW_COPY_AND_ASSIGN(BrowserFrameAndroid);
};
#endif // CHROME_BROWSER_UI_VIEWS_FRAME_BROWSER_FRAME_ANDROID_H_
// Copyright 2015 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/views/frame/native_browser_frame_factory.h"
#include "chrome/browser/ui/views/frame/browser_frame_android.h"
NativeBrowserFrame* NativeBrowserFrameFactory::Create(
BrowserFrame* browser_frame,
BrowserView* browser_view) {
return new BrowserFrameAndroid(browser_frame, browser_view);
}
......@@ -2180,6 +2180,8 @@
'browser/ui/views/frame/browser_command_handler_linux.h',
'browser/ui/views/frame/browser_frame.cc',
'browser/ui/views/frame/browser_frame.h',
'browser/ui/views/frame/browser_frame_android.cc',
'browser/ui/views/frame/browser_frame_android.h',
'browser/ui/views/frame/browser_frame_common_win.cc',
'browser/ui/views/frame/browser_frame_common_win.h',
'browser/ui/views/frame/browser_frame_mac.h',
......@@ -2217,6 +2219,7 @@
'browser/ui/views/frame/native_browser_frame.h',
'browser/ui/views/frame/native_browser_frame_factory.cc',
'browser/ui/views/frame/native_browser_frame_factory.h',
'browser/ui/views/frame/native_browser_frame_factory_android.cc',
'browser/ui/views/frame/native_browser_frame_factory_chromeos.cc',
'browser/ui/views/frame/native_browser_frame_factory_mac.mm',
'browser/ui/views/frame/system_menu_insertion_delegate_win.cc',
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment