14a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch// Copyright (c) 2010 The Chromium Authors. All rights reserved. 24a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch// Use of this source code is governed by a BSD-style license that can be 34a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch// found in the LICENSE file. 44a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 54a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#ifndef CHROME_BROWSER_UI_VIEWS_EXTENSIONS_EXTENSION_VIEW_H_ 64a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#define CHROME_BROWSER_UI_VIEWS_EXTENSIONS_EXTENSION_VIEW_H_ 74a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#pragma once 84a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 94a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#include "build/build_config.h" 104a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 114a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#include "third_party/skia/include/core/SkBitmap.h" 124a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#include "views/controls/native/native_view_host.h" 134a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 144a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochclass Browser; 154a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochclass Extension; 164a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochclass ExtensionHost; 174a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochclass ExtensionView; 184a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochclass RenderViewHost; 194a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 204a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch// This handles the display portion of an ExtensionHost. 214a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochclass ExtensionView : public views::NativeViewHost { 224a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch public: 234a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch ExtensionView(ExtensionHost* host, Browser* browser); 244a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch ~ExtensionView(); 254a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 264a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // A class that represents the container that this view is in. 274a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // (bottom shelf, side bar, etc.) 284a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch class Container { 294a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch public: 304a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch virtual ~Container() {} 314a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Mouse event notifications from the view. (useful for hover UI). 324a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch virtual void OnExtensionMouseMove(ExtensionView* view) = 0; 334a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch virtual void OnExtensionMouseLeave(ExtensionView* view) = 0; 344a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch virtual void OnExtensionPreferredSizeChanged(ExtensionView* view) {} 354a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch }; 364a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 374a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch ExtensionHost* host() const { return host_; } 384a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch Browser* browser() const { return browser_; } 394a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch const Extension* extension() const; 404a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch RenderViewHost* render_view_host() const; 414a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch void DidStopLoading(); 424a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch void SetIsClipped(bool is_clipped); 434a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 444a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Notification from ExtensionHost. 454a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch void UpdatePreferredSize(const gfx::Size& new_size); 464a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch void HandleMouseMove(); 474a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch void HandleMouseLeave(); 484a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 494a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Method for the ExtensionHost to notify us when the RenderViewHost has a 504a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // connection. 514a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch void RenderViewCreated(); 524a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 534a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Set a custom background for the view. The background will be tiled. 544a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch void SetBackground(const SkBitmap& background); 554a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 564a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Sets the container for this view. 574a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch void SetContainer(Container* container) { container_ = container; } 584a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 594a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Overridden from views::NativeViewHost: 60ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void SetVisible(bool is_visible) OVERRIDE; 61ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void ViewHierarchyChanged( 62ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen bool is_add, views::View *parent, views::View *child) OVERRIDE; 634a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 644a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch protected: 654a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Overridden from views::View. 66ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void PreferredSizeChanged() OVERRIDE; 67ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual bool SkipDefaultKeyEventProcessing(const views::KeyEvent& e) OVERRIDE; 68ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void OnBoundsChanged(const gfx::Rect& previous_bounds) OVERRIDE; 694a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 704a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch private: 714a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch friend class ExtensionHost; 724a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 734a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Initializes the RenderWidgetHostView for this object. 744a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch void CreateWidgetHostView(); 754a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 764a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // We wait to show the ExtensionView until several things have loaded. 774a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch void ShowIfCompletelyLoaded(); 784a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 794a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Restore object to initial state. Called on shutdown or after a renderer 804a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // crash. 814a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch void CleanUp(); 824a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 834a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // The running extension instance that we're displaying. 844a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Note that host_ owns view 854a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch ExtensionHost* host_; 864a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 874a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // The browser window that this view is in. 884a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch Browser* browser_; 894a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 904a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // True if we've been initialized. 914a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch bool initialized_; 924a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 934a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // The background the view should have once it is initialized. This is set 944a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // when the view has a custom background, but hasn't been initialized yet. 954a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch SkBitmap pending_background_; 964a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 974a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // What we should set the preferred width to once the ExtensionView has 984a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // loaded. 994a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch gfx::Size pending_preferred_size_; 1004a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 1014a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // The container this view is in (not necessarily its direct superview). 1024a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Note: the view does not own its container. 1034a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch Container* container_; 1044a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 1054a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Whether this extension view is clipped. 1064a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch bool is_clipped_; 1074a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 1084a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch DISALLOW_COPY_AND_ASSIGN(ExtensionView); 1094a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch}; 1104a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 1114a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#endif // CHROME_BROWSER_UI_VIEWS_EXTENSIONS_EXTENSION_VIEW_H_ 112