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

Unified Diff: chrome/browser/views/frame/embedded_non_client_view.cc

Issue 10973: Test the feasibility of turning Chrome into a multi-process ActiveX control Base URL: http://src.chromium.org/svn/trunk/src/
Patch Set: Created 12 years, 1 month 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
« no previous file with comments | « chrome/browser/views/frame/embedded_non_client_view.h ('k') | chrome/browser/views/html_dialog_view.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/views/frame/embedded_non_client_view.cc
===================================================================
--- chrome/browser/views/frame/embedded_non_client_view.cc (revision 0)
+++ chrome/browser/views/frame/embedded_non_client_view.cc (revision 0)
@@ -0,0 +1,143 @@
+// Copyright (c) 2006-2008 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/views/frame/embedded_non_client_view.h"
+
+#include "chrome/browser/browser.h"
+#include "chrome/browser/views/frame/browser_view.h"
+#include "chrome/common/gfx/path.h"
+#include "chrome/common/l10n_util.h"
+#include "chrome/views/root_view.h"
+#include "chromium_strings.h"
+
+///////////////////////////////////////////////////////////////////////////////
+// EmbeddedNonClientView, public:
+
+EmbeddedNonClientView::EmbeddedNonClientView(EmbeddedFrame* frame,
+ BrowserView* browser_view)
+ : NonClientView(),
+ frame_(frame),
+ browser_view_(browser_view) {
+}
+
+EmbeddedNonClientView::~EmbeddedNonClientView() {
+ // Avoid assert in Browser destructor for tabstrip_model_ not being empty.
+ browser_view_->browser()->CloseAllTabs();
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// EmbeddedNonClientView, TabIconView::TabContentsProvider implementation:
+
+TabContents* EmbeddedNonClientView::GetCurrentTabContents() {
+ return browser_view_->GetSelectedTabContents();
+}
+
+SkBitmap EmbeddedNonClientView::GetFavIcon() {
+ return frame_->window_delegate()->GetWindowIcon();
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// EmbeddedNonClientView, views::BaseButton::ButtonListener implementation:
+
+void EmbeddedNonClientView::ButtonPressed(views::BaseButton* sender) {
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// EmbeddedNonClientView, views::NonClientView implementation:
+
+gfx::Rect EmbeddedNonClientView::CalculateClientAreaBounds(int width,
+ int height) const {
+ return gfx::Rect(0, 0, width, height);
+}
+
+gfx::Size EmbeddedNonClientView::CalculateWindowSizeForClientSize(
+ int width,
+ int height) const {
+ return gfx::Size(width, height);
+}
+
+CPoint EmbeddedNonClientView::GetSystemMenuPoint() const {
+ return CPoint(0,0);
+}
+
+int EmbeddedNonClientView::NonClientHitTest(const gfx::Point& point) {
+ return HTNOWHERE;
+}
+
+void EmbeddedNonClientView::GetWindowMask(const gfx::Size& size,
+ gfx::Path* window_mask) {
+ DCHECK(window_mask);
+
+ // Redefine the window visible region for the new size.
+ window_mask->moveTo(0, 3);
+ window_mask->lineTo(1, 1);
+ window_mask->lineTo(3, 0);
+
+ window_mask->lineTo(SkIntToScalar(size.width() - 3), 0);
+ window_mask->lineTo(SkIntToScalar(size.width() - 1), 1);
+ window_mask->lineTo(SkIntToScalar(size.width() - 1), 3);
+ window_mask->lineTo(SkIntToScalar(size.width() - 0), 3);
+
+ window_mask->lineTo(SkIntToScalar(size.width()),
+ SkIntToScalar(size.height()));
+ window_mask->lineTo(0, SkIntToScalar(size.height()));
+ window_mask->close();
+}
+
+void EmbeddedNonClientView::EnableClose(bool enable) {
+}
+
+void EmbeddedNonClientView::ResetWindowControls() {
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// EmbeddedNonClientView, views::View overrides:
+
+void EmbeddedNonClientView::Paint(ChromeCanvas* canvas) {
+}
+
+void EmbeddedNonClientView::Layout() {
+ gfx::Rect client_bounds = CalculateClientAreaBounds(width(), height());
+ frame_->client_view()->SetBounds(client_bounds);;
+}
+
+gfx::Size EmbeddedNonClientView::GetPreferredSize() {
+ return frame_->client_view()->GetPreferredSize();;
+}
+
+void EmbeddedNonClientView::ViewHierarchyChanged(bool is_add,
+ views::View* parent,
+ views::View* embedded) {
+ if (is_add && embedded == this) {
+ DCHECK(GetContainer());
+ DCHECK(frame_->client_view()->GetParent() != this);
+ AddChildView(frame_->client_view());
+
+ // The Accessibility glue looks for the product name on these two views to
+ // determine if this is in fact a Chrome window.
+ GetRootView()->SetAccessibleName(l10n_util::GetString(IDS_PRODUCT_NAME));
+ SetAccessibleName(l10n_util::GetString(IDS_PRODUCT_NAME));
+ }
+}
+
+bool EmbeddedNonClientView::GetAccessibleRole(VARIANT* role) {
+ DCHECK(role);
+ // We aren't actually the client area of the window, but we act like it as
+ // far as MSAA and the UI tests are concerned.
+ role->vt = VT_I4;
+ role->lVal = ROLE_SYSTEM_CLIENT;
+ return true;
+}
+
+bool EmbeddedNonClientView::GetAccessibleName(std::wstring* name) {
+ if (!accessible_name_.empty()) {
+ *name = accessible_name_;
+ return true;
+ }
+ return false;
+}
+
+void EmbeddedNonClientView::SetAccessibleName(const std::wstring& name) {
+ accessible_name_ = name;
+}
« no previous file with comments | « chrome/browser/views/frame/embedded_non_client_view.h ('k') | chrome/browser/views/html_dialog_view.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698