13551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
43551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#ifndef CONTENT_SHELL_BROWSER_SHELL_H_
53551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#define CONTENT_SHELL_BROWSER_SHELL_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <vector>
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/callback_forward.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h"
13c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/strings/string_piece.h"
148bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "build/build_config.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_contents_delegate.h"
164e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "content/public/browser/web_contents_observer.h"
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ipc/ipc_channel.h"
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/native_widget_types.h"
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/gfx/size.h"
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(TOOLKIT_GTK)
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <gtk/gtk.h>
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/gtk/gtk_signal.h"
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef struct _GtkToolItem GtkToolItem;
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_ANDROID)
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/android/scoped_java_ref.h"
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#elif defined(USE_AURA)
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_CHROMEOS)
30f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace wm {
31f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class WMTestHelper;
32f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
334e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#endif  // defined(OS_CHROMEOS)
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace views {
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Widget;
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ViewsDelegate;
37f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
384e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#endif  // defined(USE_AURA)
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class GURL;
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content {
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
438bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#if defined(USE_AURA)
448bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)class ShellAuraPlatformData;
458bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#endif
468bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class BrowserContext;
482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class ShellDevToolsFrontend;
492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class ShellJavaScriptDialogManager;
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SiteInstance;
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebContents;
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This represents one window of the Content Shell, i.e. all the UI including
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// buttons and url bar, as well as the web content area.
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Shell : public WebContentsDelegate,
564e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)              public WebContentsObserver {
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
5890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  static const int kDefaultTestWindowWidthDip;
5990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  static const int kDefaultTestWindowHeightDip;
6090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~Shell();
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void LoadURL(const GURL& url);
642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void LoadURLForFrame(const GURL& url, const std::string& frame_name);
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void GoBackOrForward(int offset);
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void Reload();
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void Stop();
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void UpdateNavigationControls();
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void Close();
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void ShowDevTools();
712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void CloseDevTools();
72fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch#if (defined(OS_WIN) && !defined(USE_AURA)) || \
73fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch    defined(TOOLKIT_GTK) || defined(OS_MACOSX)
742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Resizes the main window to the given dimensions.
75f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  void SizeTo(const gfx::Size& content_size);
762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Do one time initialization at application startup.
792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  static void Initialize();
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static Shell* CreateNewWindow(BrowserContext* browser_context,
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                const GURL& url,
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                SiteInstance* site_instance,
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                int routing_id,
852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                const gfx::Size& initial_size);
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns the Shell object corresponding to the given RenderViewHost.
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static Shell* FromRenderViewHost(RenderViewHost* rvh);
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns the currently open windows.
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static std::vector<Shell*>& windows() { return windows_; }
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Closes all windows and returns. This runs a message loop.
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static void CloseAllWindows();
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Used for content_browsertests. Called once.
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static void SetShellCreatedCallback(
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      base::Callback<void(Shell*)> shell_created_callback);
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  WebContents* web_contents() const { return web_contents_.get(); }
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  gfx::NativeWindow window() { return window_; }
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_MACOSX)
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Public to be called by an ObjC bridge object.
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void ActionPerformed(int control);
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void URLEntered(std::string url_string);
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_ANDROID)
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Registers the Android Java to native methods.
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static bool Register(JNIEnv* env);
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // WebContentsDelegate
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual WebContents* OpenURLFromTab(WebContents* source,
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                      const OpenURLParams& params) OVERRIDE;
1154e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  virtual void AddNewContents(WebContents* source,
1164e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)                              WebContents* new_contents,
1174e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)                              WindowOpenDisposition disposition,
1184e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)                              const gfx::Rect& initial_pos,
1194e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)                              bool user_gesture,
1204e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)                              bool* was_blocked) OVERRIDE;
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void LoadingStateChanged(WebContents* source) OVERRIDE;
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_ANDROID)
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void LoadProgressChanged(WebContents* source,
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                   double progress) OVERRIDE;
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void ToggleFullscreenModeForTab(WebContents* web_contents,
1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                          bool enter_fullscreen) OVERRIDE;
1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual bool IsFullscreenForTabOrPending(
1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      const WebContents* web_contents) const OVERRIDE;
1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void RequestToLockMouse(WebContents* web_contents,
1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                  bool user_gesture,
1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                  bool last_unlocked_by_target) OVERRIDE;
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void CloseContents(WebContents* source) OVERRIDE;
1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual bool CanOverscrollContent() const OVERRIDE;
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void DidNavigateMainFramePostCommit(
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      WebContents* web_contents) OVERRIDE;
1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual JavaScriptDialogManager* GetJavaScriptDialogManager() OVERRIDE;
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_MACOSX)
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void HandleKeyboardEvent(
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      WebContents* source,
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const NativeWebKeyboardEvent& event) OVERRIDE;
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool AddMessageToConsole(WebContents* source,
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                   int32 level,
145a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                                   const base::string16& message,
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                   int32 line_no,
147a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                                   const base::string16& source_id) OVERRIDE;
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void RendererUnresponsive(WebContents* source) OVERRIDE;
1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void ActivateContents(WebContents* contents) OVERRIDE;
1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void DeactivateContents(WebContents* contents) OVERRIDE;
151a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch  virtual void WorkerCrashed(WebContents* source) OVERRIDE;
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  enum UIControl {
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    BACK_BUTTON,
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    FORWARD_BUTTON,
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    STOP_BUTTON
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
16090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  class DevToolsWebContentsObserver;
16190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  explicit Shell(WebContents* web_contents);
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Helper to create a new Shell given a newly created WebContents.
165b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  static Shell* CreateShell(WebContents* web_contents,
166b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)                            const gfx::Size& initial_size);
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Helper for one time initialization of application
1692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  static void PlatformInitialize(const gfx::Size& default_window_size);
170f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // Helper for one time deinitialization of platform specific state.
171f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  static void PlatformExit();
1722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1734e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  // Adjust the size when Blink sends 0 for width and/or height.
1744e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  // This happens when Blink requests a default-sized window.
1754e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  static gfx::Size AdjustWindowSize(const gfx::Size& initial_size);
1764e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // All the methods that begin with Platform need to be implemented by the
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // platform specific Shell implementation.
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Called from the destructor to let each platform do any necessary cleanup.
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void PlatformCleanUp();
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Creates the main window GUI.
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void PlatformCreateWindow(int width, int height);
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Links the WebContents into the newly created window.
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void PlatformSetContents();
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Resize the content area and GUI.
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void PlatformResizeSubViews();
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Enable/disable a button.
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void PlatformEnableUIControl(UIControl control, bool is_enabled);
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Updates the url in the url bar.
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void PlatformSetAddressBarURL(const GURL& url);
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Sets whether the spinner is spinning.
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void PlatformSetIsLoading(bool loading);
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Set the title of shell window
194a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  void PlatformSetTitle(const base::string16& title);
1952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_ANDROID)
1962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void PlatformToggleFullscreenModeForTab(WebContents* web_contents,
1972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                          bool enter_fullscreen);
1982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool PlatformIsFullscreenForTabOrPending(
1992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      const WebContents* web_contents) const;
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  gfx::NativeView GetContentView();
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2044e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  // WebContentsObserver
2054e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  virtual void TitleWasSet(NavigationEntry* entry, bool explicit_set) OVERRIDE;
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
20790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  void OnDevToolsWebContentsDestroyed();
20890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) && !defined(USE_AURA)
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static ATOM RegisterWindowClass();
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static LRESULT CALLBACK EditWndProc(HWND, UINT, WPARAM, LPARAM);
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(TOOLKIT_GTK)
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CHROMEGTK_CALLBACK_0(Shell, void, OnBackButtonClicked);
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CHROMEGTK_CALLBACK_0(Shell, void, OnForwardButtonClicked);
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CHROMEGTK_CALLBACK_0(Shell, void, OnReloadButtonClicked);
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CHROMEGTK_CALLBACK_0(Shell, void, OnStopButtonClicked);
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CHROMEGTK_CALLBACK_0(Shell, void, OnURLEntryActivate);
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CHROMEGTK_CALLBACK_0(Shell, gboolean, OnWindowDestroyed);
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CHROMEG_CALLBACK_3(Shell, gboolean, OnCloseWindowKeyPressed, GtkAccelGroup*,
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                     GObject*, guint, GdkModifierType);
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CHROMEG_CALLBACK_3(Shell, gboolean, OnNewWindowKeyPressed, GtkAccelGroup*,
2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                     GObject*, guint, GdkModifierType);
2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CHROMEG_CALLBACK_3(Shell, gboolean, OnHighlightURLView, GtkAccelGroup*,
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                     GObject*, guint, GdkModifierType);
227a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)  CHROMEG_CALLBACK_3(Shell, gboolean, OnReloadKeyPressed, GtkAccelGroup*,
228a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)                     GObject*, guint, GdkModifierType);
2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<ShellJavaScriptDialogManager> dialog_manager_;
2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<WebContents> web_contents_;
2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
23590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  scoped_ptr<DevToolsWebContentsObserver> devtools_observer_;
2362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ShellDevToolsFrontend* devtools_frontend_;
2372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool is_fullscreen_;
2392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  gfx::NativeWindow window_;
2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  gfx::NativeEditView url_edit_view_;
2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
243f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  gfx::Size content_size_;
244f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) && !defined(USE_AURA)
2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  WNDPROC default_edit_wnd_proc_;
2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static HINSTANCE instance_handle_;
2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(TOOLKIT_GTK)
2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GtkWidget* vbox_;
2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GtkToolItem* back_button_;
2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GtkToolItem* forward_button_;
2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GtkToolItem* reload_button_;
2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GtkToolItem* stop_button_;
2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GtkWidget* spinner_;
2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GtkToolItem* spinner_item_;
2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
25990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  int ui_elements_height_; // height of menubar, toolbar, etc.
2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_ANDROID)
2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::android::ScopedJavaGlobalRef<jobject> java_object_;
2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(USE_AURA)
2632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_CHROMEOS)
264f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  static wm::WMTestHelper* wm_test_helper_;
2652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif
2668bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#if defined(TOOLKIT_VIEWS)
2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static views::ViewsDelegate* views_delegate_;
2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  views::Widget* window_widget_;
2708bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#else // defined(TOOLKIT_VIEWS)
2711e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  static ShellAuraPlatformData* platform_;
2728bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#endif // defined(TOOLKIT_VIEWS)
2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool headless_;
2762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // A container of all the open windows. We use a vector so we can keep track
2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // of ordering.
2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static std::vector<Shell*> windows_;
2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static base::Callback<void(Shell*)> shell_created_callback_;
2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // True if the destructur of Shell should post a quit closure on the current
2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // message loop if the destructed Shell object was the last one.
2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static bool quit_message_loop_;
2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace content
2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2903551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#endif  // CONTENT_SHELL_BROWSER_SHELL_H_
291