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

Side by Side Diff: ios/web_view/internal/criwv_web_view_impl.mm

Issue 2675633002: Let CRIWVWebView inherit UIView instead of NSObject. (Closed)
Patch Set: Fix format. Created 3 years, 10 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
(Empty)
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
3 // found in the LICENSE file.
4
5 #import "ios/web_view/internal/criwv_web_view_impl.h"
6
7 #include <memory>
8 #include <utility>
9
10 #import "base/ios/weak_nsobject.h"
11 #include "base/memory/ptr_util.h"
12 #include "base/strings/sys_string_conversions.h"
13 #include "ios/web/public/referrer.h"
14 #import "ios/web/public/navigation_manager.h"
15 #import "ios/web/public/web_state/ui/crw_web_delegate.h"
16 #import "ios/web/public/web_state/web_state.h"
17 #import "ios/web/public/web_state/web_state_delegate_bridge.h"
18 #import "ios/web/public/web_state/web_state_observer_bridge.h"
19 #include "ios/web_view/internal/criwv_browser_state.h"
20 #import "ios/web_view/internal/translate/criwv_translate_client.h"
21 #import "ios/web_view/public/criwv_web_view_delegate.h"
22 #import "net/base/mac/url_conversions.h"
23 #include "ui/base/page_transition_types.h"
24 #include "url/gurl.h"
25
26 @interface CRIWVWebViewImpl ()<CRWWebStateDelegate, CRWWebStateObserver> {
27 id<CRIWVWebViewDelegate> _delegate;
28 ios_web_view::CRIWVBrowserState* _browserState;
29 std::unique_ptr<web::WebState> _webState;
30 std::unique_ptr<web::WebStateDelegateBridge> _webStateDelegate;
31 std::unique_ptr<web::WebStateObserverBridge> _webStateObserver;
32 CGFloat _loadProgress;
33 }
34
35 @end
36
37 @implementation CRIWVWebViewImpl
38
39 @synthesize delegate = _delegate;
40 @synthesize loadProgress = _loadProgress;
41
42 - (instancetype)initWithBrowserState:
43 (ios_web_view::CRIWVBrowserState*)browserState {
44 self = [super init];
45 if (self) {
46 _browserState = browserState;
47
48 web::WebState::CreateParams webStateCreateParams(_browserState);
49 _webState = web::WebState::Create(webStateCreateParams);
50 _webState->SetWebUsageEnabled(true);
51
52 _webStateObserver =
53 base::MakeUnique<web::WebStateObserverBridge>(_webState.get(), self);
54 _webStateDelegate = base::MakeUnique<web::WebStateDelegateBridge>(self);
55 _webState->SetDelegate(_webStateDelegate.get());
56
57 // Initialize Translate.
58 ios_web_view::CRIWVTranslateClient::CreateForWebState(_webState.get());
59 }
60 return self;
61 }
62
63 - (UIView*)view {
64 return _webState->GetView();
65 }
66
67 - (BOOL)canGoBack {
68 return _webState && _webState->GetNavigationManager()->CanGoBack();
69 }
70
71 - (BOOL)canGoForward {
72 return _webState && _webState->GetNavigationManager()->CanGoForward();
73 }
74
75 - (BOOL)isLoading {
76 return _webState->IsLoading();
77 }
78
79 - (NSURL*)visibleURL {
80 return net::NSURLWithGURL(_webState->GetVisibleURL());
81 }
82
83 - (NSString*)pageTitle {
84 return base::SysUTF16ToNSString(_webState->GetTitle());
85 }
86
87 - (void)goBack {
88 if (_webState->GetNavigationManager())
89 _webState->GetNavigationManager()->GoBack();
90 }
91
92 - (void)goForward {
93 if (_webState->GetNavigationManager())
94 _webState->GetNavigationManager()->GoForward();
95 }
96
97 - (void)reload {
98 _webState->GetNavigationManager()->Reload(true);
99 }
100
101 - (void)stopLoading {
102 _webState->Stop();
103 }
104
105 - (void)loadURL:(NSURL*)URL {
106 web::NavigationManager::WebLoadParams params(net::GURLWithNSURL(URL));
107 params.transition_type = ui::PAGE_TRANSITION_TYPED;
108 _webState->GetNavigationManager()->LoadURLWithParams(params);
109 }
110
111 - (void)evaluateJavaScript:(NSString*)javaScriptString
112 completionHandler:(void (^)(id, NSError*))completionHandler {
113 [_webState->GetJSInjectionReceiver() executeJavaScript:javaScriptString
114 completionHandler:completionHandler];
115 }
116
117 - (void)setDelegate:(id<CRIWVWebViewDelegate>)delegate {
118 _delegate = delegate;
119
120 // Set up the translate delegate.
121 ios_web_view::CRIWVTranslateClient* translateClient =
122 ios_web_view::CRIWVTranslateClient::FromWebState(_webState.get());
123 id<CRIWVTranslateDelegate> translateDelegate = nil;
124 if ([_delegate respondsToSelector:@selector(translateDelegate)])
125 translateDelegate = [_delegate translateDelegate];
126 translateClient->set_translate_delegate(translateDelegate);
127 }
128
129 - (void)notifyDidUpdateWithChanges:(CRIWVWebViewUpdateType)changes {
130 SEL selector = @selector(webView:didUpdateWithChanges:);
131 if ([_delegate respondsToSelector:selector]) {
132 [_delegate webView:self didUpdateWithChanges:changes];
133 }
134 }
135
136 // -----------------------------------------------------------------------
137 // WebStateObserver implementation.
138
139 - (void)didStartProvisionalNavigationForURL:(const GURL&)URL {
140 [self notifyDidUpdateWithChanges:CRIWVWebViewUpdateTypeURL];
141 }
142
143 - (void)didCommitNavigationWithDetails:
144 (const web::LoadCommittedDetails&)details {
145 [self notifyDidUpdateWithChanges:CRIWVWebViewUpdateTypeURL];
146 }
147
148 - (void)webState:(web::WebState*)webState didLoadPageWithSuccess:(BOOL)success {
149 DCHECK_EQ(_webState.get(), webState);
150 SEL selector = @selector(webView:didFinishLoadingWithURL:loadSuccess:);
151 if ([_delegate respondsToSelector:selector]) {
152 [_delegate webView:self
153 didFinishLoadingWithURL:[self visibleURL]
154 loadSuccess:success];
155 }
156 }
157
158 - (void)webState:(web::WebState*)webState
159 didChangeLoadingProgress:(double)progress {
160 [self notifyDidUpdateWithChanges:CRIWVWebViewUpdateTypeProgress];
161 }
162
163 @end
OLDNEW
« no previous file with comments | « ios/web_view/internal/criwv_web_view_impl.h ('k') | ios/web_view/internal/criwv_web_view_internal.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698