Chromium Code Reviews| 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 "chrome/browser/guest_view/guest_view_base.h" | 5 #include "chrome/browser/guest_view/guest_view_base.h" |
| 6 | 6 |
| 7 #include "base/lazy_instance.h" | 7 #include "base/lazy_instance.h" |
| 8 #include "base/strings/utf_string_conversions.h" | 8 #include "base/strings/utf_string_conversions.h" |
| 9 #include "chrome/browser/guest_view/app_view/app_view_guest.h" | 9 #include "chrome/browser/guest_view/app_view/app_view_guest.h" |
| 10 #include "chrome/browser/guest_view/extension_options/extension_options_guest.h" | 10 #include "chrome/browser/guest_view/extension_options/extension_options_guest.h" |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 86 }; | 86 }; |
| 87 | 87 |
| 88 GuestViewBase::GuestViewBase(content::BrowserContext* browser_context, | 88 GuestViewBase::GuestViewBase(content::BrowserContext* browser_context, |
| 89 int guest_instance_id) | 89 int guest_instance_id) |
| 90 : embedder_web_contents_(NULL), | 90 : embedder_web_contents_(NULL), |
| 91 embedder_render_process_id_(0), | 91 embedder_render_process_id_(0), |
| 92 browser_context_(browser_context), | 92 browser_context_(browser_context), |
| 93 guest_instance_id_(guest_instance_id), | 93 guest_instance_id_(guest_instance_id), |
| 94 view_instance_id_(guestview::kInstanceIDNone), | 94 view_instance_id_(guestview::kInstanceIDNone), |
| 95 initialized_(false), | 95 initialized_(false), |
| 96 auto_size_enabled_(false), | |
| 96 weak_ptr_factory_(this) { | 97 weak_ptr_factory_(this) { |
| 97 } | 98 } |
| 98 | 99 |
| 99 void GuestViewBase::Init( | 100 void GuestViewBase::Init( |
| 100 const std::string& embedder_extension_id, | 101 const std::string& embedder_extension_id, |
| 101 int embedder_render_process_id, | 102 int embedder_render_process_id, |
| 102 const base::DictionaryValue& create_params, | 103 const base::DictionaryValue& create_params, |
| 103 const WebContentsCreatedCallback& callback) { | 104 const WebContentsCreatedCallback& callback) { |
| 104 if (initialized_) | 105 if (initialized_) |
| 105 return; | 106 return; |
| (...skipping 30 matching lines...) Expand all Loading... | |
| 136 guest_web_contents->SetDelegate(this); | 137 guest_web_contents->SetDelegate(this); |
| 137 webcontents_guestview_map.Get().insert( | 138 webcontents_guestview_map.Get().insert( |
| 138 std::make_pair(guest_web_contents, this)); | 139 std::make_pair(guest_web_contents, this)); |
| 139 GuestViewManager::FromBrowserContext(browser_context_)-> | 140 GuestViewManager::FromBrowserContext(browser_context_)-> |
| 140 AddGuest(guest_instance_id_, guest_web_contents); | 141 AddGuest(guest_instance_id_, guest_web_contents); |
| 141 | 142 |
| 142 // Give the derived class an opportunity to perform additional initialization. | 143 // Give the derived class an opportunity to perform additional initialization. |
| 143 DidInitialize(); | 144 DidInitialize(); |
| 144 } | 145 } |
| 145 | 146 |
| 147 void GuestViewBase::SetAutoSize(bool enabled, | |
| 148 const gfx::Size& min_size, | |
| 149 const gfx::Size& max_size) { | |
| 150 min_auto_size_ = min_size; | |
| 151 min_auto_size_.SetToMin(max_size); | |
| 152 max_auto_size_ = max_size; | |
| 153 max_auto_size_.SetToMax(min_size); | |
| 154 | |
| 155 enabled &= !!max_auto_size_.width() && !!max_auto_size_.height(); | |
| 156 if (!enabled && !auto_size_enabled_) | |
| 157 return; | |
| 158 | |
| 159 auto_size_enabled_ = enabled; | |
| 160 | |
| 161 if (!attached()) | |
| 162 return; | |
| 163 | |
| 164 content::RenderViewHost* rvh = guest_web_contents()->GetRenderViewHost(); | |
| 165 if (auto_size_enabled_) { | |
| 166 rvh->EnableAutoResize(min_auto_size_, max_auto_size_); | |
| 167 } else { | |
| 168 rvh->DisableAutoResize(element_size_); | |
| 169 guest_size_ = element_size_; | |
| 170 GuestSizeChangedDueToAutoSize(guest_size_, element_size_); | |
| 171 } | |
| 172 } | |
| 173 | |
| 146 // static | 174 // static |
| 147 void GuestViewBase::RegisterGuestViewType( | 175 void GuestViewBase::RegisterGuestViewType( |
| 148 const std::string& view_type, | 176 const std::string& view_type, |
| 149 const GuestCreationCallback& callback) { | 177 const GuestCreationCallback& callback) { |
| 150 GuestViewCreationMap::iterator it = | 178 GuestViewCreationMap::iterator it = |
| 151 guest_view_registry.Get().find(view_type); | 179 guest_view_registry.Get().find(view_type); |
| 152 DCHECK(it == guest_view_registry.Get().end()); | 180 DCHECK(it == guest_view_registry.Get().end()); |
| 153 guest_view_registry.Get()[view_type] = callback; | 181 guest_view_registry.Get()[view_type] = callback; |
| 154 } | 182 } |
| 155 | 183 |
| (...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 261 delete guest_web_contents(); | 289 delete guest_web_contents(); |
| 262 } | 290 } |
| 263 | 291 |
| 264 void GuestViewBase::DidAttach() { | 292 void GuestViewBase::DidAttach() { |
| 265 // Give the derived class an opportunity to perform some actions. | 293 // Give the derived class an opportunity to perform some actions. |
| 266 DidAttachToEmbedder(); | 294 DidAttachToEmbedder(); |
| 267 | 295 |
| 268 SendQueuedEvents(); | 296 SendQueuedEvents(); |
| 269 } | 297 } |
| 270 | 298 |
| 299 void GuestViewBase::ElementSizeChanged(const gfx::Size& old_size, | |
| 300 const gfx::Size& new_size) { | |
| 301 element_size_ = new_size; | |
| 302 } | |
| 303 | |
| 271 int GuestViewBase::GetGuestInstanceID() const { | 304 int GuestViewBase::GetGuestInstanceID() const { |
| 272 return guest_instance_id_; | 305 return guest_instance_id_; |
| 273 } | 306 } |
| 274 | 307 |
| 308 void GuestViewBase::GuestSizeChanged(const gfx::Size& old_size, | |
| 309 const gfx::Size& new_size) { | |
|
ericzeng
2014/08/01 18:55:09
indentation
Fady Samuel
2014/08/01 20:06:13
Done.
| |
| 310 if (!auto_size_enabled_) | |
| 311 return; | |
| 312 guest_size_ = new_size; | |
| 313 GuestSizeChangedDueToAutoSize(old_size, new_size); | |
| 314 } | |
| 315 | |
| 275 void GuestViewBase::SetOpener(GuestViewBase* guest) { | 316 void GuestViewBase::SetOpener(GuestViewBase* guest) { |
| 276 if (guest && guest->IsViewType(GetViewType())) { | 317 if (guest && guest->IsViewType(GetViewType())) { |
| 277 opener_ = guest->AsWeakPtr(); | 318 opener_ = guest->AsWeakPtr(); |
| 278 return; | 319 return; |
| 279 } | 320 } |
| 280 opener_ = base::WeakPtr<GuestViewBase>(); | 321 opener_ = base::WeakPtr<GuestViewBase>(); |
| 281 } | 322 } |
| 282 | 323 |
| 283 void GuestViewBase::RegisterDestructionCallback( | 324 void GuestViewBase::RegisterDestructionCallback( |
| 284 const DestructionCallback& callback) { | 325 const DestructionCallback& callback) { |
| (...skipping 19 matching lines...) Expand all Loading... | |
| 304 if (!IsDragAndDropEnabled()) { | 345 if (!IsDragAndDropEnabled()) { |
| 305 const char script[] = "window.addEventListener('dragstart', function() { " | 346 const char script[] = "window.addEventListener('dragstart', function() { " |
| 306 " window.event.preventDefault(); " | 347 " window.event.preventDefault(); " |
| 307 "});"; | 348 "});"; |
| 308 render_view_host->GetMainFrame()->ExecuteJavaScript( | 349 render_view_host->GetMainFrame()->ExecuteJavaScript( |
| 309 base::ASCIIToUTF16(script)); | 350 base::ASCIIToUTF16(script)); |
| 310 } | 351 } |
| 311 DidStopLoading(); | 352 DidStopLoading(); |
| 312 } | 353 } |
| 313 | 354 |
| 355 void GuestViewBase::RenderViewReady() { | |
| 356 GuestReady(); | |
| 357 content::RenderViewHost* rvh = guest_web_contents()->GetRenderViewHost(); | |
| 358 if (auto_size_enabled_) { | |
| 359 rvh->EnableAutoResize(min_auto_size_, max_auto_size_); | |
| 360 } else { | |
| 361 rvh->DisableAutoResize(element_size_); | |
| 362 } | |
| 363 } | |
| 364 | |
| 314 void GuestViewBase::WebContentsDestroyed() { | 365 void GuestViewBase::WebContentsDestroyed() { |
| 315 GuestDestroyed(); | 366 GuestDestroyed(); |
| 316 delete this; | 367 delete this; |
| 317 } | 368 } |
| 318 | 369 |
| 319 bool GuestViewBase::ShouldFocusPageAfterCrash() { | 370 bool GuestViewBase::ShouldFocusPageAfterCrash() { |
| 320 // Focus is managed elsewhere. | 371 // Focus is managed elsewhere. |
| 321 return false; | 372 return false; |
| 322 } | 373 } |
| 323 | 374 |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 384 guest_web_contents); | 435 guest_web_contents); |
| 385 callback.Run(guest_web_contents); | 436 callback.Run(guest_web_contents); |
| 386 } | 437 } |
| 387 | 438 |
| 388 // static | 439 // static |
| 389 void GuestViewBase::RegisterGuestViewTypes() { | 440 void GuestViewBase::RegisterGuestViewTypes() { |
| 390 AppViewGuest::Register(); | 441 AppViewGuest::Register(); |
| 391 ExtensionOptionsGuest::Register(); | 442 ExtensionOptionsGuest::Register(); |
| 392 WebViewGuest::Register(); | 443 WebViewGuest::Register(); |
| 393 } | 444 } |
| OLD | NEW |