172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be
3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file.
4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
5ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#ifndef CHROME_BROWSER_UI_GTK_EXTENSIONS_EXTENSION_VIEW_GTK_H_
6ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#define CHROME_BROWSER_UI_GTK_EXTENSIONS_EXTENSION_VIEW_GTK_H_
73345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#pragma once
8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/basictypes.h"
10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "third_party/skia/include/core/SkBitmap.h"
1172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "ui/gfx/native_widget_types.h"
1272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "ui/gfx/size.h"
13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass Browser;
15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass ExtensionHost;
16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass RenderViewHost;
17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass RenderWidgetHostViewGtk;
18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass SkBitmap;
19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass ExtensionViewGtk {
21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public:
22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ExtensionViewGtk(ExtensionHost* extension_host, Browser* browser);
23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  class Container {
25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch   public:
26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    virtual ~Container() {}
27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    virtual void OnExtensionPreferredSizeChanged(ExtensionViewGtk* view,
28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                                 const gfx::Size& new_size) {}
29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  };
30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void Init();
32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  gfx::NativeView native_view();
34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  Browser* browser() const { return browser_; }
35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void SetBackground(const SkBitmap& background);
37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Sets the container for this view.
39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void SetContainer(Container* container) { container_ = container; }
40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Method for the ExtensionHost to notify us about the correct size for
42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // extension contents.
43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void UpdatePreferredSize(const gfx::Size& new_size);
44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Method for the ExtensionHost to notify us when the RenderViewHost has a
46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // connection.
47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void RenderViewCreated();
48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  RenderViewHost* render_view_host() const;
50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private:
52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void CreateWidgetHostView();
53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  Browser* browser_;
55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ExtensionHost* extension_host_;
57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  RenderWidgetHostViewGtk* render_widget_host_view_;
59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // The background the view should have once it is initialized. This is set
61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // when the view has a custom background, but hasn't been initialized yet.
62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  SkBitmap pending_background_;
63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // This view's container.
65c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  Container* container_;
66c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
67c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  DISALLOW_COPY_AND_ASSIGN(ExtensionViewGtk);
68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch};
69c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
70ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#endif  // CHROME_BROWSER_UI_GTK_EXTENSIONS_EXTENSION_VIEW_GTK_H_
71