Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(60)

Side by Side Diff: ios/web/web_state/web_state_impl.mm

Issue 1851003003: [ios] Added web// public API to let embedder observe loading progress. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixed compilation Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « ios/web/web_state/web_state_impl.h ('k') | ios/web/web_state/web_state_impl_unittest.mm » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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
OLDNEW
« no previous file with comments | « ios/web/web_state/web_state_impl.h ('k') | ios/web/web_state/web_state_impl_unittest.mm » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698