| 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 #import "ios/web/web_state/ui/crw_wk_web_view_web_controller.h" | 28 #import "ios/web/web_state/ui/crw_wk_web_view_web_controller.h" |
| 28 #include "ios/web/web_state/web_state_facade_delegate.h" | 29 #include "ios/web/web_state/web_state_facade_delegate.h" |
| 29 #import "ios/web/webui/web_ui_ios_controller_factory_registry.h" | 30 #import "ios/web/webui/web_ui_ios_controller_factory_registry.h" |
| 30 #import "ios/web/webui/web_ui_ios_impl.h" | 31 #import "ios/web/webui/web_ui_ios_impl.h" |
| 31 #include "net/http/http_response_headers.h" | 32 #include "net/http/http_response_headers.h" |
| 32 | 33 |
| 33 namespace web { | 34 namespace web { |
| 34 | 35 |
| 35 WebStateImpl::WebStateImpl(BrowserState* browser_state) | 36 WebStateImpl::WebStateImpl(BrowserState* browser_state) |
| 36 : is_loading_(false), | 37 : delegate_(nullptr), |
| 38 is_loading_(false), |
| 37 is_being_destroyed_(false), | 39 is_being_destroyed_(false), |
| 38 facade_delegate_(nullptr), | 40 facade_delegate_(nullptr), |
| 39 web_controller_(nil), | 41 web_controller_(nil), |
| 40 navigation_manager_(this, browser_state), | 42 navigation_manager_(this, browser_state), |
| 41 interstitial_(nullptr), | 43 interstitial_(nullptr), |
| 42 weak_factory_(this) { | 44 weak_factory_(this) { |
| 43 GlobalWebStateEventTracker::GetInstance()->OnWebStateCreated(this); | 45 GlobalWebStateEventTracker::GetInstance()->OnWebStateCreated(this); |
| 44 web_controller_.reset( | 46 web_controller_.reset( |
| 45 [[CRWWKWebViewWebController alloc] initWithWebState:this]); | 47 [[CRWWKWebViewWebController alloc] initWithWebState:this]); |
| 46 } | 48 } |
| (...skipping 11 matching lines...) Expand all Loading... |
| 58 DCHECK(!facade_delegate_); | 60 DCHECK(!facade_delegate_); |
| 59 | 61 |
| 60 FOR_EACH_OBSERVER(WebStateObserver, observers_, WebStateDestroyed()); | 62 FOR_EACH_OBSERVER(WebStateObserver, observers_, WebStateDestroyed()); |
| 61 FOR_EACH_OBSERVER(WebStateObserver, observers_, ResetWebState()); | 63 FOR_EACH_OBSERVER(WebStateObserver, observers_, ResetWebState()); |
| 62 FOR_EACH_OBSERVER(WebStatePolicyDecider, policy_deciders_, | 64 FOR_EACH_OBSERVER(WebStatePolicyDecider, policy_deciders_, |
| 63 WebStateDestroyed()); | 65 WebStateDestroyed()); |
| 64 FOR_EACH_OBSERVER(WebStatePolicyDecider, policy_deciders_, ResetWebState()); | 66 FOR_EACH_OBSERVER(WebStatePolicyDecider, policy_deciders_, ResetWebState()); |
| 65 DCHECK(script_command_callbacks_.empty()); | 67 DCHECK(script_command_callbacks_.empty()); |
| 66 if (request_tracker_.get()) | 68 if (request_tracker_.get()) |
| 67 CloseRequestTracker(); | 69 CloseRequestTracker(); |
| 70 SetDelegate(nullptr); |
| 71 } |
| 72 |
| 73 WebStateDelegate* WebStateImpl::GetDelegate() { |
| 74 return delegate_; |
| 75 } |
| 76 |
| 77 void WebStateImpl::SetDelegate(WebStateDelegate* delegate) { |
| 78 if (delegate == delegate_) |
| 79 return; |
| 80 if (delegate_) |
| 81 delegate_->Detach(this); |
| 82 delegate_ = delegate; |
| 83 if (delegate_) { |
| 84 delegate_->Attach(this); |
| 85 } |
| 68 } | 86 } |
| 69 | 87 |
| 70 void WebStateImpl::AddObserver(WebStateObserver* observer) { | 88 void WebStateImpl::AddObserver(WebStateObserver* observer) { |
| 71 DCHECK(!observers_.HasObserver(observer)); | 89 DCHECK(!observers_.HasObserver(observer)); |
| 72 observers_.AddObserver(observer); | 90 observers_.AddObserver(observer); |
| 73 } | 91 } |
| 74 | 92 |
| 75 void WebStateImpl::RemoveObserver(WebStateObserver* observer) { | 93 void WebStateImpl::RemoveObserver(WebStateObserver* observer) { |
| 76 DCHECK(observers_.HasObserver(observer)); | 94 DCHECK(observers_.HasObserver(observer)); |
| 77 observers_.RemoveObserver(observer); | 95 observers_.RemoveObserver(observer); |
| (...skipping 294 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 372 web::WebInterstitial* interstitial = interstitial_; | 390 web::WebInterstitial* interstitial = interstitial_; |
| 373 interstitial_ = nullptr; | 391 interstitial_ = nullptr; |
| 374 interstitial->DontProceed(); | 392 interstitial->DontProceed(); |
| 375 // Don't access |interstitial| after calling |DontProceed()|, as it triggers | 393 // Don't access |interstitial| after calling |DontProceed()|, as it triggers |
| 376 // deletion. | 394 // deletion. |
| 377 FOR_EACH_OBSERVER(WebStateObserver, observers_, InsterstitialDismissed()); | 395 FOR_EACH_OBSERVER(WebStateObserver, observers_, InsterstitialDismissed()); |
| 378 } | 396 } |
| 379 [web_controller_ clearTransientContentView]; | 397 [web_controller_ clearTransientContentView]; |
| 380 } | 398 } |
| 381 | 399 |
| 400 void WebStateImpl::SendChangeLoadProgress(double progress) { |
| 401 if (delegate_) { |
| 402 delegate_->LoadProgressChanged(this, progress); |
| 403 } |
| 404 } |
| 405 |
| 382 WebUIIOS* WebStateImpl::CreateWebUIIOS(const GURL& url) { | 406 WebUIIOS* WebStateImpl::CreateWebUIIOS(const GURL& url) { |
| 383 WebUIIOSControllerFactory* factory = | 407 WebUIIOSControllerFactory* factory = |
| 384 WebUIIOSControllerFactoryRegistry::GetInstance(); | 408 WebUIIOSControllerFactoryRegistry::GetInstance(); |
| 385 if (!factory) | 409 if (!factory) |
| 386 return NULL; | 410 return NULL; |
| 387 WebUIIOSImpl* web_ui = new WebUIIOSImpl(this); | 411 WebUIIOSImpl* web_ui = new WebUIIOSImpl(this); |
| 388 WebUIIOSController* controller = | 412 WebUIIOSController* controller = |
| 389 factory->CreateWebUIIOSControllerForURL(web_ui, url); | 413 factory->CreateWebUIIOSControllerForURL(web_ui, url); |
| 390 if (controller) { | 414 if (controller) { |
| 391 web_ui->SetController(controller); | 415 web_ui->SetController(controller); |
| (...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 574 const LoadCommittedDetails& load_details) { | 598 const LoadCommittedDetails& load_details) { |
| 575 FOR_EACH_OBSERVER(WebStateObserver, observers_, | 599 FOR_EACH_OBSERVER(WebStateObserver, observers_, |
| 576 NavigationItemCommitted(load_details)); | 600 NavigationItemCommitted(load_details)); |
| 577 } | 601 } |
| 578 | 602 |
| 579 WebState* WebStateImpl::GetWebState() { | 603 WebState* WebStateImpl::GetWebState() { |
| 580 return this; | 604 return this; |
| 581 } | 605 } |
| 582 | 606 |
| 583 } // namespace web | 607 } // namespace web |
| OLD | NEW |