| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "extensions/browser/guest_view/extension_options/extension_options_gues
t.h" | 5 #include "extensions/browser/guest_view/extension_options/extension_options_gues
t.h" |
| 6 | 6 |
| 7 #include "base/metrics/user_metrics.h" | 7 #include "base/metrics/user_metrics.h" |
| 8 #include "base/values.h" | 8 #include "base/values.h" |
| 9 #include "components/crx_file/id_util.h" | 9 #include "components/crx_file/id_util.h" |
| 10 #include "content/public/browser/navigation_details.h" | 10 #include "content/public/browser/navigation_details.h" |
| (...skipping 24 matching lines...) Expand all Loading... |
| 35 | 35 |
| 36 // static | 36 // static |
| 37 const char ExtensionOptionsGuest::Type[] = "extensionoptions"; | 37 const char ExtensionOptionsGuest::Type[] = "extensionoptions"; |
| 38 | 38 |
| 39 ExtensionOptionsGuest::ExtensionOptionsGuest( | 39 ExtensionOptionsGuest::ExtensionOptionsGuest( |
| 40 content::WebContents* owner_web_contents, | 40 content::WebContents* owner_web_contents, |
| 41 int guest_instance_id) | 41 int guest_instance_id) |
| 42 : GuestView<ExtensionOptionsGuest>(owner_web_contents, guest_instance_id), | 42 : GuestView<ExtensionOptionsGuest>(owner_web_contents, guest_instance_id), |
| 43 extension_options_guest_delegate_( | 43 extension_options_guest_delegate_( |
| 44 extensions::ExtensionsAPIClient::Get() | 44 extensions::ExtensionsAPIClient::Get() |
| 45 ->CreateExtensionOptionsGuestDelegate(this)), | 45 ->CreateExtensionOptionsGuestDelegate(this)) { |
| 46 has_navigated_(false) { | |
| 47 } | 46 } |
| 48 | 47 |
| 49 ExtensionOptionsGuest::~ExtensionOptionsGuest() { | 48 ExtensionOptionsGuest::~ExtensionOptionsGuest() { |
| 50 } | 49 } |
| 51 | 50 |
| 52 // static | 51 // static |
| 53 extensions::GuestViewBase* ExtensionOptionsGuest::Create( | 52 extensions::GuestViewBase* ExtensionOptionsGuest::Create( |
| 54 content::WebContents* owner_web_contents, | 53 content::WebContents* owner_web_contents, |
| 55 int guest_instance_id) { | 54 int guest_instance_id) { |
| 56 return new ExtensionOptionsGuest(owner_web_contents, guest_instance_id); | 55 return new ExtensionOptionsGuest(owner_web_contents, guest_instance_id); |
| 57 } | 56 } |
| 58 | 57 |
| 58 bool ExtensionOptionsGuest::CanRunInDetachedState() const { |
| 59 return true; |
| 60 } |
| 61 |
| 59 void ExtensionOptionsGuest::CreateWebContents( | 62 void ExtensionOptionsGuest::CreateWebContents( |
| 60 const base::DictionaryValue& create_params, | 63 const base::DictionaryValue& create_params, |
| 61 const WebContentsCreatedCallback& callback) { | 64 const WebContentsCreatedCallback& callback) { |
| 62 // Get the extension's base URL. | 65 // Get the extension's base URL. |
| 63 std::string extension_id; | 66 std::string extension_id; |
| 64 create_params.GetString(extensionoptions::kExtensionId, &extension_id); | 67 create_params.GetString(extensionoptions::kExtensionId, &extension_id); |
| 65 | 68 |
| 66 if (!crx_file::id_util::IdIsValid(extension_id)) { | 69 if (!crx_file::id_util::IdIsValid(extension_id)) { |
| 67 callback.Run(nullptr); | 70 callback.Run(nullptr); |
| 68 return; | 71 return; |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 104 // Create a WebContents using the extension URL. The options page's | 107 // Create a WebContents using the extension URL. The options page's |
| 105 // WebContents should live in the same process as its parent extension's | 108 // WebContents should live in the same process as its parent extension's |
| 106 // WebContents, so we can use |extension_url| for creating the SiteInstance. | 109 // WebContents, so we can use |extension_url| for creating the SiteInstance. |
| 107 content::SiteInstance* options_site_instance = | 110 content::SiteInstance* options_site_instance = |
| 108 content::SiteInstance::CreateForURL(browser_context(), extension_url); | 111 content::SiteInstance::CreateForURL(browser_context(), extension_url); |
| 109 WebContents::CreateParams params(browser_context(), options_site_instance); | 112 WebContents::CreateParams params(browser_context(), options_site_instance); |
| 110 params.guest_delegate = this; | 113 params.guest_delegate = this; |
| 111 callback.Run(WebContents::Create(params)); | 114 callback.Run(WebContents::Create(params)); |
| 112 } | 115 } |
| 113 | 116 |
| 114 void ExtensionOptionsGuest::DidAttachToEmbedder() { | |
| 115 // We should not re-navigate on reattachment. | |
| 116 if (has_navigated_) | |
| 117 return; | |
| 118 | |
| 119 web_contents()->GetController().LoadURL(options_page_, | |
| 120 content::Referrer(), | |
| 121 ui::PAGE_TRANSITION_LINK, | |
| 122 std::string()); | |
| 123 has_navigated_ = true; | |
| 124 } | |
| 125 | |
| 126 void ExtensionOptionsGuest::DidInitialize( | 117 void ExtensionOptionsGuest::DidInitialize( |
| 127 const base::DictionaryValue& create_params) { | 118 const base::DictionaryValue& create_params) { |
| 128 extension_function_dispatcher_.reset( | 119 extension_function_dispatcher_.reset( |
| 129 new extensions::ExtensionFunctionDispatcher(browser_context(), this)); | 120 new extensions::ExtensionFunctionDispatcher(browser_context(), this)); |
| 130 if (extension_options_guest_delegate_) { | 121 if (extension_options_guest_delegate_) { |
| 131 extension_options_guest_delegate_->DidInitialize(); | 122 extension_options_guest_delegate_->DidInitialize(); |
| 132 } | 123 } |
| 124 web_contents()->GetController().LoadURL(options_page_, |
| 125 content::Referrer(), |
| 126 ui::PAGE_TRANSITION_LINK, |
| 127 std::string()); |
| 133 } | 128 } |
| 134 | 129 |
| 135 void ExtensionOptionsGuest::DidStopLoading() { | 130 void ExtensionOptionsGuest::DidStopLoading() { |
| 136 scoped_ptr<base::DictionaryValue> args(new base::DictionaryValue()); | 131 scoped_ptr<base::DictionaryValue> args(new base::DictionaryValue()); |
| 137 DispatchEventToView(new GuestViewBase::Event( | 132 DispatchEventToView(new GuestViewBase::Event( |
| 138 extension_options_internal::OnLoad::kEventName, args.Pass())); | 133 extension_options_internal::OnLoad::kEventName, args.Pass())); |
| 139 } | 134 } |
| 140 | 135 |
| 141 const char* ExtensionOptionsGuest::GetAPINamespace() const { | 136 const char* ExtensionOptionsGuest::GetAPINamespace() const { |
| 142 return extensionoptions::kAPINamespace; | 137 return extensionoptions::kAPINamespace; |
| 143 } | 138 } |
| 144 | 139 |
| 145 int ExtensionOptionsGuest::GetTaskPrefix() const { | 140 int ExtensionOptionsGuest::GetTaskPrefix() const { |
| 146 return IDS_EXTENSION_TASK_MANAGER_EXTENSIONOPTIONS_TAG_PREFIX; | 141 return IDS_EXTENSION_TASK_MANAGER_EXTENSIONOPTIONS_TAG_PREFIX; |
| 147 } | 142 } |
| 148 | 143 |
| 149 void ExtensionOptionsGuest::GuestSizeChangedDueToAutoSize( | 144 void ExtensionOptionsGuest::GuestSizeChangedDueToAutoSize( |
| 150 const gfx::Size& old_size, | 145 const gfx::Size& old_size, |
| 151 const gfx::Size& new_size) { | 146 const gfx::Size& new_size) { |
| 152 extension_options_internal::SizeChangedOptions options; | 147 extension_options_internal::SizeChangedOptions options; |
| 153 options.old_width = old_size.width(); | 148 options.old_width = old_size.width(); |
| 154 options.old_height = old_size.height(); | 149 options.old_height = old_size.height(); |
| 155 options.new_width = new_size.width(); | 150 options.new_width = new_size.width(); |
| 156 options.new_height = new_size.height(); | 151 options.new_height = new_size.height(); |
| 157 DispatchEventToView(new GuestViewBase::Event( | 152 DispatchEventToView(new GuestViewBase::Event( |
| 158 extension_options_internal::OnSizeChanged::kEventName, | 153 extension_options_internal::OnSizeChanged::kEventName, |
| 159 options.ToValue())); | 154 options.ToValue())); |
| 160 } | 155 } |
| 161 | 156 |
| 157 bool ExtensionOptionsGuest::IsAutoSizeSupported() const { |
| 158 return true; |
| 159 } |
| 160 |
| 161 bool ExtensionOptionsGuest::IsPreferredSizeModeEnabled() const { |
| 162 return true; |
| 163 } |
| 164 |
| 162 void ExtensionOptionsGuest::OnPreferredSizeChanged(const gfx::Size& pref_size) { | 165 void ExtensionOptionsGuest::OnPreferredSizeChanged(const gfx::Size& pref_size) { |
| 163 extension_options_internal::PreferredSizeChangedOptions options; | 166 extension_options_internal::PreferredSizeChangedOptions options; |
| 164 options.width = pref_size.width(); | 167 options.width = pref_size.width(); |
| 165 options.height = pref_size.height(); | 168 options.height = pref_size.height(); |
| 166 DispatchEventToView(new GuestViewBase::Event( | 169 DispatchEventToView(new GuestViewBase::Event( |
| 167 extension_options_internal::OnPreferredSizeChanged::kEventName, | 170 extension_options_internal::OnPreferredSizeChanged::kEventName, |
| 168 options.ToValue())); | 171 options.ToValue())); |
| 169 } | 172 } |
| 170 | 173 |
| 171 bool ExtensionOptionsGuest::IsAutoSizeSupported() const { | |
| 172 return true; | |
| 173 } | |
| 174 | |
| 175 bool ExtensionOptionsGuest::IsPreferredSizeModeEnabled() const { | |
| 176 return true; | |
| 177 } | |
| 178 | |
| 179 content::WebContents* ExtensionOptionsGuest::GetAssociatedWebContents() const { | 174 content::WebContents* ExtensionOptionsGuest::GetAssociatedWebContents() const { |
| 180 return web_contents(); | 175 return web_contents(); |
| 181 } | 176 } |
| 182 | 177 |
| 183 content::WebContents* ExtensionOptionsGuest::OpenURLFromTab( | 178 content::WebContents* ExtensionOptionsGuest::OpenURLFromTab( |
| 184 content::WebContents* source, | 179 content::WebContents* source, |
| 185 const content::OpenURLParams& params) { | 180 const content::OpenURLParams& params) { |
| 186 if (!extension_options_guest_delegate_) | 181 if (!extension_options_guest_delegate_) |
| 187 return nullptr; | 182 return nullptr; |
| 188 | 183 |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 262 return handled; | 257 return handled; |
| 263 } | 258 } |
| 264 | 259 |
| 265 void ExtensionOptionsGuest::OnRequest( | 260 void ExtensionOptionsGuest::OnRequest( |
| 266 const ExtensionHostMsg_Request_Params& params) { | 261 const ExtensionHostMsg_Request_Params& params) { |
| 267 extension_function_dispatcher_->Dispatch(params, | 262 extension_function_dispatcher_->Dispatch(params, |
| 268 web_contents()->GetRenderViewHost()); | 263 web_contents()->GetRenderViewHost()); |
| 269 } | 264 } |
| 270 | 265 |
| 271 } // namespace extensions | 266 } // namespace extensions |
| OLD | NEW |