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

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: Self review 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
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 #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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698