| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/ui/extensions/shell_window.h" | 5 #include "chrome/browser/ui/extensions/shell_window.h" |
| 6 | 6 |
| 7 #include "base/utf_string_conversions.h" | 7 #include "base/utf_string_conversions.h" |
| 8 #include "chrome/browser/extensions/extension_process_manager.h" | 8 #include "chrome/browser/extensions/extension_process_manager.h" |
| 9 #include "chrome/browser/extensions/extension_tabs_module_constants.h" | 9 #include "chrome/browser/extensions/extension_tabs_module_constants.h" |
| 10 #include "chrome/browser/extensions/extension_window_controller.h" | |
| 11 #include "chrome/browser/extensions/shell_window_registry.h" | 10 #include "chrome/browser/extensions/shell_window_registry.h" |
| 12 #include "chrome/browser/file_select_helper.h" | 11 #include "chrome/browser/file_select_helper.h" |
| 13 #include "chrome/browser/intents/web_intents_util.h" | 12 #include "chrome/browser/intents/web_intents_util.h" |
| 14 #include "chrome/browser/lifetime/application_lifetime.h" | 13 #include "chrome/browser/lifetime/application_lifetime.h" |
| 15 #include "chrome/browser/profiles/profile.h" | 14 #include "chrome/browser/profiles/profile.h" |
| 16 #include "chrome/browser/sessions/session_id.h" | 15 #include "chrome/browser/sessions/session_id.h" |
| 17 #include "chrome/browser/ui/browser.h" | 16 #include "chrome/browser/ui/browser.h" |
| 18 #include "chrome/browser/ui/intents/web_intent_picker_controller.h" | 17 #include "chrome/browser/ui/intents/web_intent_picker_controller.h" |
| 19 #include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h" | 18 #include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h" |
| 20 #include "chrome/browser/view_type_utils.h" | 19 #include "chrome/browser/view_type_utils.h" |
| (...skipping 13 matching lines...) Expand all Loading... |
| 34 #include "content/public/common/renderer_preferences.h" | 33 #include "content/public/common/renderer_preferences.h" |
| 35 | 34 |
| 36 using content::SiteInstance; | 35 using content::SiteInstance; |
| 37 using content::WebContents; | 36 using content::WebContents; |
| 38 | 37 |
| 39 namespace { | 38 namespace { |
| 40 static const int kDefaultWidth = 512; | 39 static const int kDefaultWidth = 512; |
| 41 static const int kDefaultHeight = 384; | 40 static const int kDefaultHeight = 384; |
| 42 } // namespace | 41 } // namespace |
| 43 | 42 |
| 44 namespace internal { | |
| 45 | |
| 46 class ShellWindowController : public ExtensionWindowController { | |
| 47 public: | |
| 48 ShellWindowController(ShellWindow* shell_window, Profile* profile); | |
| 49 | |
| 50 // Overriden from ExtensionWindowController | |
| 51 virtual int GetWindowId() const OVERRIDE; | |
| 52 virtual std::string GetWindowTypeText() const OVERRIDE; | |
| 53 virtual base::DictionaryValue* CreateWindowValueWithTabs() const OVERRIDE; | |
| 54 virtual bool CanClose(Reason* reason) const OVERRIDE; | |
| 55 virtual void SetFullscreenMode(bool is_fullscreen, | |
| 56 const GURL& extension_url) const OVERRIDE; | |
| 57 virtual bool IsVisibleToExtension( | |
| 58 const extensions::Extension* extension) const OVERRIDE; | |
| 59 | |
| 60 private: | |
| 61 ShellWindow* shell_window_; | |
| 62 | |
| 63 DISALLOW_COPY_AND_ASSIGN(ShellWindowController); | |
| 64 }; | |
| 65 | |
| 66 ShellWindowController::ShellWindowController( | |
| 67 ShellWindow* shell_window, | |
| 68 Profile* profile) | |
| 69 : ExtensionWindowController(shell_window, profile), | |
| 70 shell_window_(shell_window) { | |
| 71 } | |
| 72 | |
| 73 int ShellWindowController::GetWindowId() const { | |
| 74 return static_cast<int>(shell_window_->session_id().id()); | |
| 75 } | |
| 76 | |
| 77 std::string ShellWindowController::GetWindowTypeText() const { | |
| 78 return extension_tabs_module_constants::kWindowTypeValueShell; | |
| 79 } | |
| 80 | |
| 81 base::DictionaryValue* ShellWindowController::CreateWindowValueWithTabs() | |
| 82 const { | |
| 83 return CreateWindowValue(); | |
| 84 } | |
| 85 | |
| 86 bool ShellWindowController::CanClose(Reason* reason) const { | |
| 87 return true; | |
| 88 } | |
| 89 | |
| 90 void ShellWindowController::SetFullscreenMode(bool is_fullscreen, | |
| 91 const GURL& extension_url) const { | |
| 92 // TODO(mihaip): implement | |
| 93 } | |
| 94 | |
| 95 bool ShellWindowController::IsVisibleToExtension( | |
| 96 const extensions::Extension* extension) const { | |
| 97 return shell_window_->extension() == extension; | |
| 98 } | |
| 99 | |
| 100 } // namespace internal | |
| 101 | |
| 102 ShellWindow::CreateParams::CreateParams() | 43 ShellWindow::CreateParams::CreateParams() |
| 103 : frame(ShellWindow::CreateParams::FRAME_CUSTOM), | 44 : frame(ShellWindow::CreateParams::FRAME_CUSTOM), |
| 104 bounds(10, 10, kDefaultWidth, kDefaultHeight) { | 45 bounds(10, 10, kDefaultWidth, kDefaultHeight) { |
| 105 } | 46 } |
| 106 | 47 |
| 107 ShellWindow* ShellWindow::Create(Profile* profile, | 48 ShellWindow* ShellWindow::Create(Profile* profile, |
| 108 const extensions::Extension* extension, | 49 const extensions::Extension* extension, |
| 109 const GURL& url, | 50 const GURL& url, |
| 110 const ShellWindow::CreateParams params) { | 51 const ShellWindow::CreateParams params) { |
| 111 // This object will delete itself when the window is closed. | 52 // This object will delete itself when the window is closed. |
| (...skipping 25 matching lines...) Expand all Loading... |
| 137 content::Source<Profile>(profile_)); | 78 content::Source<Profile>(profile_)); |
| 138 // Close when the browser is exiting. | 79 // Close when the browser is exiting. |
| 139 // TODO(mihaip): we probably don't want this in the long run (when platform | 80 // TODO(mihaip): we probably don't want this in the long run (when platform |
| 140 // apps are no longer tied to the browser process). | 81 // apps are no longer tied to the browser process). |
| 141 registrar_.Add(this, content::NOTIFICATION_APP_TERMINATING, | 82 registrar_.Add(this, content::NOTIFICATION_APP_TERMINATING, |
| 142 content::NotificationService::AllSources()); | 83 content::NotificationService::AllSources()); |
| 143 | 84 |
| 144 // Prevent the browser process from shutting down while this window is open. | 85 // Prevent the browser process from shutting down while this window is open. |
| 145 browser::StartKeepAlive(); | 86 browser::StartKeepAlive(); |
| 146 | 87 |
| 147 // Make this window available to the extension API. | |
| 148 extension_window_controller_.reset( | |
| 149 new internal::ShellWindowController(this, profile_)); | |
| 150 | |
| 151 ShellWindowRegistry::Get(profile_)->AddShellWindow(this); | 88 ShellWindowRegistry::Get(profile_)->AddShellWindow(this); |
| 152 } | 89 } |
| 153 | 90 |
| 154 ShellWindow::~ShellWindow() { | 91 ShellWindow::~ShellWindow() { |
| 155 // Unregister now to prevent getting NOTIFICATION_APP_TERMINATING if we're the | 92 // Unregister now to prevent getting NOTIFICATION_APP_TERMINATING if we're the |
| 156 // last window open. | 93 // last window open. |
| 157 registrar_.RemoveAll(); | 94 registrar_.RemoveAll(); |
| 158 | 95 |
| 159 ShellWindowRegistry::Get(profile_)->RemoveShellWindow(this); | 96 ShellWindowRegistry::Get(profile_)->RemoveShellWindow(this); |
| 160 | 97 |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 206 FileSelectHelper::RunFileChooser(tab, params); | 143 FileSelectHelper::RunFileChooser(tab, params); |
| 207 } | 144 } |
| 208 | 145 |
| 209 bool ShellWindow::IsPopupOrPanel(const WebContents* source) const { | 146 bool ShellWindow::IsPopupOrPanel(const WebContents* source) const { |
| 210 DCHECK(source == web_contents_); | 147 DCHECK(source == web_contents_); |
| 211 return true; | 148 return true; |
| 212 } | 149 } |
| 213 | 150 |
| 214 void ShellWindow::MoveContents(WebContents* source, const gfx::Rect& pos) { | 151 void ShellWindow::MoveContents(WebContents* source, const gfx::Rect& pos) { |
| 215 DCHECK(source == web_contents_); | 152 DCHECK(source == web_contents_); |
| 216 extension_window_controller_->window()->SetBounds(pos); | 153 SetBounds(pos); |
| 217 } | 154 } |
| 218 | 155 |
| 219 void ShellWindow::NavigationStateChanged( | 156 void ShellWindow::NavigationStateChanged( |
| 220 const content::WebContents* source, unsigned changed_flags) { | 157 const content::WebContents* source, unsigned changed_flags) { |
| 221 DCHECK(source == web_contents_); | 158 DCHECK(source == web_contents_); |
| 222 if (changed_flags & content::INVALIDATE_TYPE_TITLE) | 159 if (changed_flags & content::INVALIDATE_TYPE_TITLE) |
| 223 UpdateWindowTitle(); | 160 UpdateWindowTitle(); |
| 224 } | 161 } |
| 225 | 162 |
| 226 void ShellWindow::Observe(int type, | 163 void ShellWindow::Observe(int type, |
| (...skipping 10 matching lines...) Expand all Loading... |
| 237 } | 174 } |
| 238 case content::NOTIFICATION_APP_TERMINATING: | 175 case content::NOTIFICATION_APP_TERMINATING: |
| 239 Close(); | 176 Close(); |
| 240 break; | 177 break; |
| 241 default: | 178 default: |
| 242 NOTREACHED() << "Received unexpected notification"; | 179 NOTREACHED() << "Received unexpected notification"; |
| 243 } | 180 } |
| 244 } | 181 } |
| 245 | 182 |
| 246 ExtensionWindowController* ShellWindow::GetExtensionWindowController() const { | 183 ExtensionWindowController* ShellWindow::GetExtensionWindowController() const { |
| 247 return extension_window_controller_.get(); | 184 return NULL; |
| 248 } | 185 } |
| 249 | 186 |
| 250 void ShellWindow::OnRequest(const ExtensionHostMsg_Request_Params& params) { | 187 void ShellWindow::OnRequest(const ExtensionHostMsg_Request_Params& params) { |
| 251 extension_function_dispatcher_.Dispatch(params, | 188 extension_function_dispatcher_.Dispatch(params, |
| 252 web_contents_->GetRenderViewHost()); | 189 web_contents_->GetRenderViewHost()); |
| 253 } | 190 } |
| OLD | NEW |