| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 "ios/web/web_state/web_state_impl.h" | 5 #include "ios/web/web_state/web_state_impl.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 #include <stdint.h> | 8 #include <stdint.h> |
| 9 | 9 |
| 10 #include "base/strings/sys_string_conversions.h" | 10 #include "base/strings/sys_string_conversions.h" |
| 11 #include "ios/web/interstitials/web_interstitial_impl.h" | 11 #include "ios/web/interstitials/web_interstitial_impl.h" |
| 12 #import "ios/web/navigation/crw_session_controller.h" | 12 #import "ios/web/navigation/crw_session_controller.h" |
| 13 #import "ios/web/navigation/crw_session_entry.h" | 13 #import "ios/web/navigation/crw_session_entry.h" |
| 14 #include "ios/web/navigation/navigation_item_impl.h" | 14 #include "ios/web/navigation/navigation_item_impl.h" |
| 15 #include "ios/web/net/request_group_util.h" | 15 #include "ios/web/net/request_group_util.h" |
| 16 #include "ios/web/public/browser_state.h" | 16 #include "ios/web/public/browser_state.h" |
| 17 #include "ios/web/public/navigation_item.h" | 17 #include "ios/web/public/navigation_item.h" |
| 18 #include "ios/web/public/url_util.h" | 18 #include "ios/web/public/url_util.h" |
| 19 #include "ios/web/public/web_client.h" | 19 #include "ios/web/public/web_client.h" |
| 20 #include "ios/web/public/web_state/credential.h" | 20 #include "ios/web/public/web_state/credential.h" |
| 21 #include "ios/web/public/web_state/ui/crw_content_view.h" | 21 #include "ios/web/public/web_state/ui/crw_content_view.h" |
| 22 #include "ios/web/public/web_state/web_state_delegate.h" |
| 22 #include "ios/web/public/web_state/web_state_observer.h" | 23 #include "ios/web/public/web_state/web_state_observer.h" |
| 23 #include "ios/web/public/web_state/web_state_policy_decider.h" | 24 #include "ios/web/public/web_state/web_state_policy_decider.h" |
| 24 #include "ios/web/web_state/global_web_state_event_tracker.h" | 25 #include "ios/web/web_state/global_web_state_event_tracker.h" |
| 25 #import "ios/web/web_state/ui/crw_web_controller.h" | 26 #import "ios/web/web_state/ui/crw_web_controller.h" |
| 26 #import "ios/web/web_state/ui/crw_web_controller_container_view.h" | 27 #import "ios/web/web_state/ui/crw_web_controller_container_view.h" |
| 27 #include "ios/web/web_state/web_state_facade_delegate.h" | 28 #include "ios/web/web_state/web_state_facade_delegate.h" |
| 28 #import "ios/web/webui/web_ui_ios_controller_factory_registry.h" | 29 #import "ios/web/webui/web_ui_ios_controller_factory_registry.h" |
| 29 #import "ios/web/webui/web_ui_ios_impl.h" | 30 #import "ios/web/webui/web_ui_ios_impl.h" |
| 30 #include "net/http/http_response_headers.h" | 31 #include "net/http/http_response_headers.h" |
| 31 | 32 |
| 32 namespace web { | 33 namespace web { |
| 33 | 34 |
| 34 WebStateImpl::WebStateImpl(BrowserState* browser_state) | 35 WebStateImpl::WebStateImpl(BrowserState* browser_state) |
| 35 : is_loading_(false), | 36 : delegate_(nullptr), |
| 37 is_loading_(false), |
| 36 is_being_destroyed_(false), | 38 is_being_destroyed_(false), |
| 37 facade_delegate_(nullptr), | 39 facade_delegate_(nullptr), |
| 38 web_controller_(nil), | 40 web_controller_(nil), |
| 39 navigation_manager_(this, browser_state), | 41 navigation_manager_(this, browser_state), |
| 40 interstitial_(nullptr), | 42 interstitial_(nullptr), |
| 41 weak_factory_(this) { | 43 weak_factory_(this) { |
| 42 GlobalWebStateEventTracker::GetInstance()->OnWebStateCreated(this); | 44 GlobalWebStateEventTracker::GetInstance()->OnWebStateCreated(this); |
| 43 } | 45 } |
| 44 | 46 |
| 45 WebStateImpl::~WebStateImpl() { | 47 WebStateImpl::~WebStateImpl() { |
| 46 is_being_destroyed_ = true; | 48 is_being_destroyed_ = true; |
| 47 | 49 |
| 48 // WebUI depends on web state so it must be destroyed first in case any WebUI | 50 // WebUI depends on web state so it must be destroyed first in case any WebUI |
| 49 // implementations depends on accessing web state during destruction. | 51 // implementations depends on accessing web state during destruction. |
| 50 ClearWebUI(); | 52 ClearWebUI(); |
| 51 | 53 |
| 52 // The facade layer (owned by the delegate) should be destroyed before the web | 54 // The facade layer (owned by the delegate) should be destroyed before the web |
| 53 // layer. | 55 // layer. |
| 54 DCHECK(!facade_delegate_); | 56 DCHECK(!facade_delegate_); |
| 55 | 57 |
| 56 FOR_EACH_OBSERVER(WebStateObserver, observers_, WebStateDestroyed()); | 58 FOR_EACH_OBSERVER(WebStateObserver, observers_, WebStateDestroyed()); |
| 57 FOR_EACH_OBSERVER(WebStateObserver, observers_, ResetWebState()); | 59 FOR_EACH_OBSERVER(WebStateObserver, observers_, ResetWebState()); |
| 58 FOR_EACH_OBSERVER(WebStatePolicyDecider, policy_deciders_, | 60 FOR_EACH_OBSERVER(WebStatePolicyDecider, policy_deciders_, |
| 59 WebStateDestroyed()); | 61 WebStateDestroyed()); |
| 60 FOR_EACH_OBSERVER(WebStatePolicyDecider, policy_deciders_, ResetWebState()); | 62 FOR_EACH_OBSERVER(WebStatePolicyDecider, policy_deciders_, ResetWebState()); |
| 61 DCHECK(script_command_callbacks_.empty()); | 63 DCHECK(script_command_callbacks_.empty()); |
| 62 if (request_tracker_.get()) | 64 if (request_tracker_.get()) |
| 63 CloseRequestTracker(); | 65 CloseRequestTracker(); |
| 66 SetDelegate(nullptr); |
| 67 } |
| 68 |
| 69 WebStateDelegate* WebStateImpl::GetDelegate() { |
| 70 return delegate_; |
| 71 } |
| 72 |
| 73 void WebStateImpl::SetDelegate(WebStateDelegate* delegate) { |
| 74 if (delegate == delegate_) |
| 75 return; |
| 76 if (delegate_) |
| 77 delegate_->Detach(this); |
| 78 delegate_ = delegate; |
| 79 if (delegate_) { |
| 80 delegate_->Attach(this); |
| 81 } |
| 64 } | 82 } |
| 65 | 83 |
| 66 void WebStateImpl::AddObserver(WebStateObserver* observer) { | 84 void WebStateImpl::AddObserver(WebStateObserver* observer) { |
| 67 DCHECK(!observers_.HasObserver(observer)); | 85 DCHECK(!observers_.HasObserver(observer)); |
| 68 observers_.AddObserver(observer); | 86 observers_.AddObserver(observer); |
| 69 } | 87 } |
| 70 | 88 |
| 71 void WebStateImpl::RemoveObserver(WebStateObserver* observer) { | 89 void WebStateImpl::RemoveObserver(WebStateObserver* observer) { |
| 72 DCHECK(observers_.HasObserver(observer)); | 90 DCHECK(observers_.HasObserver(observer)); |
| 73 observers_.RemoveObserver(observer); | 91 observers_.RemoveObserver(observer); |
| (...skipping 286 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 360 web::WebInterstitial* interstitial = interstitial_; | 378 web::WebInterstitial* interstitial = interstitial_; |
| 361 interstitial_ = nullptr; | 379 interstitial_ = nullptr; |
| 362 interstitial->DontProceed(); | 380 interstitial->DontProceed(); |
| 363 // Don't access |interstitial| after calling |DontProceed()|, as it triggers | 381 // Don't access |interstitial| after calling |DontProceed()|, as it triggers |
| 364 // deletion. | 382 // deletion. |
| 365 FOR_EACH_OBSERVER(WebStateObserver, observers_, InsterstitialDismissed()); | 383 FOR_EACH_OBSERVER(WebStateObserver, observers_, InsterstitialDismissed()); |
| 366 } | 384 } |
| 367 [web_controller_ clearTransientContentView]; | 385 [web_controller_ clearTransientContentView]; |
| 368 } | 386 } |
| 369 | 387 |
| 388 void WebStateImpl::SendChangeLoadProgress(double progress) { |
| 389 if (delegate_) { |
| 390 delegate_->LoadProgressChanged(this, progress); |
| 391 } |
| 392 } |
| 393 |
| 370 WebUIIOS* WebStateImpl::CreateWebUIIOS(const GURL& url) { | 394 WebUIIOS* WebStateImpl::CreateWebUIIOS(const GURL& url) { |
| 371 WebUIIOSControllerFactory* factory = | 395 WebUIIOSControllerFactory* factory = |
| 372 WebUIIOSControllerFactoryRegistry::GetInstance(); | 396 WebUIIOSControllerFactoryRegistry::GetInstance(); |
| 373 if (!factory) | 397 if (!factory) |
| 374 return NULL; | 398 return NULL; |
| 375 WebUIIOSImpl* web_ui = new WebUIIOSImpl(this); | 399 WebUIIOSImpl* web_ui = new WebUIIOSImpl(this); |
| 376 WebUIIOSController* controller = | 400 WebUIIOSController* controller = |
| 377 factory->CreateWebUIIOSControllerForURL(web_ui, url); | 401 factory->CreateWebUIIOSControllerForURL(web_ui, url); |
| 378 if (controller) { | 402 if (controller) { |
| 379 web_ui->SetController(controller); | 403 web_ui->SetController(controller); |
| (...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 562 const LoadCommittedDetails& load_details) { | 586 const LoadCommittedDetails& load_details) { |
| 563 FOR_EACH_OBSERVER(WebStateObserver, observers_, | 587 FOR_EACH_OBSERVER(WebStateObserver, observers_, |
| 564 NavigationItemCommitted(load_details)); | 588 NavigationItemCommitted(load_details)); |
| 565 } | 589 } |
| 566 | 590 |
| 567 WebState* WebStateImpl::GetWebState() { | 591 WebState* WebStateImpl::GetWebState() { |
| 568 return this; | 592 return this; |
| 569 } | 593 } |
| 570 | 594 |
| 571 } // namespace web | 595 } // namespace web |
| OLD | NEW |