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

Side by Side Diff: ios/web/web_state/ui/crw_web_controller.mm

Issue 1861593005: Convert //ios from scoped_ptr to std::unique_ptr. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Add header 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 2012 The Chromium Authors. All rights reserved. 1 // Copyright 2012 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 #import "ios/web/web_state/ui/crw_web_controller.h" 5 #import "ios/web/web_state/ui/crw_web_controller.h"
6 6
7 #import <objc/runtime.h> 7 #import <objc/runtime.h>
8 #include <stddef.h> 8 #include <stddef.h>
9 9
10 #include <cmath> 10 #include <cmath>
11 #include <memory>
11 #include <utility> 12 #include <utility>
12 13
13 #include "base/ios/block_types.h" 14 #include "base/ios/block_types.h"
14 #import "base/ios/ns_error_util.h" 15 #import "base/ios/ns_error_util.h"
15 #include "base/ios/weak_nsobject.h" 16 #include "base/ios/weak_nsobject.h"
16 #include "base/json/json_reader.h" 17 #include "base/json/json_reader.h"
17 #include "base/json/json_writer.h" 18 #include "base/json/json_writer.h"
18 #include "base/json/string_escape.h" 19 #include "base/json/string_escape.h"
19 #include "base/logging.h" 20 #include "base/logging.h"
20 #include "base/mac/bundle_locations.h" 21 #include "base/mac/bundle_locations.h"
21 #include "base/mac/foundation_util.h" 22 #include "base/mac/foundation_util.h"
22 #include "base/mac/objc_property_releaser.h" 23 #include "base/mac/objc_property_releaser.h"
23 #include "base/mac/scoped_cftyperef.h" 24 #include "base/mac/scoped_cftyperef.h"
24 #include "base/mac/scoped_nsobject.h" 25 #include "base/mac/scoped_nsobject.h"
25 #include "base/memory/scoped_ptr.h"
26 #include "base/metrics/histogram.h" 26 #include "base/metrics/histogram.h"
27 #include "base/metrics/user_metrics_action.h" 27 #include "base/metrics/user_metrics_action.h"
28 #include "base/strings/string_util.h" 28 #include "base/strings/string_util.h"
29 #include "base/strings/sys_string_conversions.h" 29 #include "base/strings/sys_string_conversions.h"
30 #include "base/strings/utf_string_conversions.h" 30 #include "base/strings/utf_string_conversions.h"
31 #include "base/time/time.h" 31 #include "base/time/time.h"
32 #include "base/values.h" 32 #include "base/values.h"
33 #include "components/prefs/pref_service.h" 33 #include "components/prefs/pref_service.h"
34 #include "components/url_formatter/url_formatter.h" 34 #include "components/url_formatter/url_formatter.h"
35 #import "ios/net/nsurlrequest_util.h" 35 #import "ios/net/nsurlrequest_util.h"
36 #include "ios/public/provider/web/web_ui_ios.h" 36 #include "ios/public/provider/web/web_ui_ios.h"
37 #import "ios/web/crw_network_activity_indicator_manager.h" 37 #import "ios/web/crw_network_activity_indicator_manager.h"
38 #import "ios/web/history_state_util.h" 38 #import "ios/web/history_state_util.h"
39 #include "ios/web/interstitials/web_interstitial_impl.h" 39 #include "ios/web/interstitials/web_interstitial_impl.h"
40 #import "ios/web/navigation/crw_session_certificate_policy_manager.h" 40 #import "ios/web/navigation/crw_session_certificate_policy_manager.h"
41 #import "ios/web/navigation/crw_session_controller.h" 41 #import "ios/web/navigation/crw_session_controller.h"
42 #import "ios/web/navigation/crw_session_entry.h" 42 #import "ios/web/navigation/crw_session_entry.h"
43 #import "ios/web/navigation/navigation_item_impl.h" 43 #import "ios/web/navigation/navigation_item_impl.h"
44 #import "ios/web/navigation/navigation_manager_impl.h" 44 #import "ios/web/navigation/navigation_manager_impl.h"
45 #include "ios/web/net/request_group_util.h" 45 #include "ios/web/net/request_group_util.h"
46 #include "ios/web/public/browser_state.h" 46 #include "ios/web/public/browser_state.h"
47 #include "ios/web/public/favicon_url.h" 47 #include "ios/web/public/favicon_url.h"
48 #include "ios/web/public/navigation_item.h"
48 #import "ios/web/public/navigation_manager.h" 49 #import "ios/web/public/navigation_manager.h"
49 #include "ios/web/public/navigation_item.h"
50 #include "ios/web/public/referrer.h" 50 #include "ios/web/public/referrer.h"
51 #include "ios/web/public/referrer_util.h" 51 #include "ios/web/public/referrer_util.h"
52 #include "ios/web/public/ssl_status.h" 52 #include "ios/web/public/ssl_status.h"
53 #import "ios/web/public/url_scheme_util.h" 53 #import "ios/web/public/url_scheme_util.h"
54 #include "ios/web/public/url_util.h" 54 #include "ios/web/public/url_util.h"
55 #include "ios/web/public/user_metrics.h" 55 #include "ios/web/public/user_metrics.h"
56 #include "ios/web/public/web_client.h" 56 #include "ios/web/public/web_client.h"
57 #include "ios/web/public/web_kit_constants.h" 57 #include "ios/web/public/web_kit_constants.h"
58 #include "ios/web/public/web_state/credential.h" 58 #include "ios/web/public/web_state/credential.h"
59 #import "ios/web/public/web_state/crw_web_controller_observer.h" 59 #import "ios/web/public/web_state/crw_web_controller_observer.h"
60 #import "ios/web/public/web_state/crw_web_view_scroll_view_proxy.h" 60 #import "ios/web/public/web_state/crw_web_view_scroll_view_proxy.h"
61 #import "ios/web/public/web_state/js/credential_util.h" 61 #import "ios/web/public/web_state/js/credential_util.h"
62 #import "ios/web/public/web_state/js/crw_js_injection_manager.h" 62 #import "ios/web/public/web_state/js/crw_js_injection_manager.h"
63 #import "ios/web/public/web_state/js/crw_js_injection_receiver.h" 63 #import "ios/web/public/web_state/js/crw_js_injection_receiver.h"
64 #import "ios/web/public/web_state/ui/crw_content_view.h" 64 #import "ios/web/public/web_state/ui/crw_content_view.h"
65 #import "ios/web/public/web_state/ui/crw_native_content.h" 65 #import "ios/web/public/web_state/ui/crw_native_content.h"
66 #import "ios/web/public/web_state/ui/crw_native_content_provider.h" 66 #import "ios/web/public/web_state/ui/crw_native_content_provider.h"
67 #import "ios/web/public/web_state/ui/crw_web_view_content_view.h" 67 #import "ios/web/public/web_state/ui/crw_web_view_content_view.h"
68 #include "ios/web/public/web_state/url_verification_constants.h" 68 #include "ios/web/public/web_state/url_verification_constants.h"
69 #include "ios/web/public/web_state/web_state.h" 69 #include "ios/web/public/web_state/web_state.h"
70 #include "ios/web/web_state/blocked_popup_info.h" 70 #include "ios/web/web_state/blocked_popup_info.h"
71 #import "ios/web/web_state/crw_web_view_proxy_impl.h" 71 #import "ios/web/web_state/crw_web_view_proxy_impl.h"
72 #import "ios/web/web_state/error_translation_util.h" 72 #import "ios/web/web_state/error_translation_util.h"
73 #include "ios/web/web_state/frame_info.h" 73 #include "ios/web/web_state/frame_info.h"
74 #import "ios/web/web_state/page_viewport_state.h"
75 #import "ios/web/web_state/js/crw_js_early_script_manager.h" 74 #import "ios/web/web_state/js/crw_js_early_script_manager.h"
76 #import "ios/web/web_state/js/crw_js_plugin_placeholder_manager.h" 75 #import "ios/web/web_state/js/crw_js_plugin_placeholder_manager.h"
77 #import "ios/web/web_state/js/crw_js_window_id_manager.h" 76 #import "ios/web/web_state/js/crw_js_window_id_manager.h"
77 #import "ios/web/web_state/page_viewport_state.h"
78 #import "ios/web/web_state/ui/crw_context_menu_provider.h" 78 #import "ios/web/web_state/ui/crw_context_menu_provider.h"
79 #import "ios/web/web_state/ui/crw_swipe_recognizer_provider.h" 79 #import "ios/web/web_state/ui/crw_swipe_recognizer_provider.h"
80 #import "ios/web/web_state/ui/crw_web_controller+protected.h" 80 #import "ios/web/web_state/ui/crw_web_controller+protected.h"
81 #import "ios/web/web_state/ui/crw_web_controller_container_view.h" 81 #import "ios/web/web_state/ui/crw_web_controller_container_view.h"
82 #import "ios/web/web_state/ui/crw_wk_web_view_web_controller.h" 82 #import "ios/web/web_state/ui/crw_wk_web_view_web_controller.h"
83 #import "ios/web/web_state/web_controller_observer_bridge.h" 83 #import "ios/web/web_state/web_controller_observer_bridge.h"
84 #include "ios/web/web_state/web_state_facade_delegate.h" 84 #include "ios/web/web_state/web_state_facade_delegate.h"
85 #import "ios/web/web_state/web_state_impl.h" 85 #import "ios/web/web_state/web_state_impl.h"
86 #import "net/base/mac/url_conversions.h" 86 #import "net/base/mac/url_conversions.h"
87 #include "net/base/net_errors.h" 87 #include "net/base/net_errors.h"
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after
237 // The touch tracking recognizer allowing us to decide if a navigation is 237 // The touch tracking recognizer allowing us to decide if a navigation is
238 // started by the user. 238 // started by the user.
239 base::scoped_nsobject<CRWTouchTrackingRecognizer> _touchTrackingRecognizer; 239 base::scoped_nsobject<CRWTouchTrackingRecognizer> _touchTrackingRecognizer;
240 // Long press recognizer that allows showing context menus. 240 // Long press recognizer that allows showing context menus.
241 base::scoped_nsobject<UILongPressGestureRecognizer> _contextMenuRecognizer; 241 base::scoped_nsobject<UILongPressGestureRecognizer> _contextMenuRecognizer;
242 // DOM element information for the point where the user made the last touch. 242 // DOM element information for the point where the user made the last touch.
243 // Can be null if has not been calculated yet. Precalculation is necessary 243 // Can be null if has not been calculated yet. Precalculation is necessary
244 // because retreiving DOM element relies on async API so element info can not 244 // because retreiving DOM element relies on async API so element info can not
245 // be built on demand. May contain the following keys: "href", "src", "title", 245 // be built on demand. May contain the following keys: "href", "src", "title",
246 // "referrerPolicy". All values are strings. Used for showing context menus. 246 // "referrerPolicy". All values are strings. Used for showing context menus.
247 scoped_ptr<base::DictionaryValue> _DOMElementForLastTouch; 247 std::unique_ptr<base::DictionaryValue> _DOMElementForLastTouch;
248 // Whether a click is in progress. 248 // Whether a click is in progress.
249 BOOL _clickInProgress; 249 BOOL _clickInProgress;
250 // Data on the recorded last user interaction. 250 // Data on the recorded last user interaction.
251 scoped_ptr<web::UserInteractionEvent> _lastUserInteraction; 251 std::unique_ptr<web::UserInteractionEvent> _lastUserInteraction;
252 // YES if there has been user interaction with views owned by this controller. 252 // YES if there has been user interaction with views owned by this controller.
253 BOOL _userInteractedWithWebController; 253 BOOL _userInteractedWithWebController;
254 // The time of the last page transfer start, measured in seconds since Jan 1 254 // The time of the last page transfer start, measured in seconds since Jan 1
255 // 2001. 255 // 2001.
256 CFAbsoluteTime _lastTransferTimeInSeconds; 256 CFAbsoluteTime _lastTransferTimeInSeconds;
257 // Default URL (about:blank). 257 // Default URL (about:blank).
258 GURL _defaultURL; 258 GURL _defaultURL;
259 // Show overlay view, don't reload web page. 259 // Show overlay view, don't reload web page.
260 BOOL _overlayPreviewMode; 260 BOOL _overlayPreviewMode;
261 // If |YES|, calls |setShouldSuppressDialogs:YES| when window id is injected 261 // If |YES|, calls |setShouldSuppressDialogs:YES| when window id is injected
262 // into the web view. 262 // into the web view.
263 BOOL _shouldSuppressDialogsOnWindowIDInjection; 263 BOOL _shouldSuppressDialogsOnWindowIDInjection;
264 // The URL of an expected future recreation of the |webView|. Valid 264 // The URL of an expected future recreation of the |webView|. Valid
265 // only if the web view was discarded for non-user-visible reasons, such that 265 // only if the web view was discarded for non-user-visible reasons, such that
266 // if the next load request is for that URL, it should be treated as a 266 // if the next load request is for that URL, it should be treated as a
267 // reconstruction that should use cache aggressively. 267 // reconstruction that should use cache aggressively.
268 GURL _expectedReconstructionURL; 268 GURL _expectedReconstructionURL;
269 // Whether the web page is currently performing window.history.pushState or 269 // Whether the web page is currently performing window.history.pushState or
270 // window.history.replaceState 270 // window.history.replaceState
271 // Set to YES on window.history.willChangeState message. To NO on 271 // Set to YES on window.history.willChangeState message. To NO on
272 // window.history.didPushState or window.history.didReplaceState. 272 // window.history.didPushState or window.history.didReplaceState.
273 BOOL _changingHistoryState; 273 BOOL _changingHistoryState;
274 274
275 scoped_ptr<web::NewWindowInfo> _externalRequest; 275 std::unique_ptr<web::NewWindowInfo> _externalRequest;
276 276
277 // The WebStateImpl instance associated with this CRWWebController. 277 // The WebStateImpl instance associated with this CRWWebController.
278 scoped_ptr<WebStateImpl> _webStateImpl; 278 std::unique_ptr<WebStateImpl> _webStateImpl;
279 279
280 // A set of URLs opened in external applications; stored so that errors 280 // A set of URLs opened in external applications; stored so that errors
281 // from the web view can be identified as resulting from these events. 281 // from the web view can be identified as resulting from these events.
282 base::scoped_nsobject<NSMutableSet> _openedApplicationURL; 282 base::scoped_nsobject<NSMutableSet> _openedApplicationURL;
283 283
284 // Object that manages all early script injection into the web view. 284 // Object that manages all early script injection into the web view.
285 base::scoped_nsobject<CRWJSEarlyScriptManager> _earlyScriptManager; 285 base::scoped_nsobject<CRWJSEarlyScriptManager> _earlyScriptManager;
286 286
287 // Script manager for setting the windowID. 287 // Script manager for setting the windowID.
288 base::scoped_nsobject<CRWJSWindowIdManager> _windowIDJSManager; 288 base::scoped_nsobject<CRWJSWindowIdManager> _windowIDJSManager;
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
340 - (BOOL)shouldClosePageOnNativeApplicationLoad; 340 - (BOOL)shouldClosePageOnNativeApplicationLoad;
341 // Called after URL is finished loading and _loadPhase is set to PAGE_LOADED. 341 // Called after URL is finished loading and _loadPhase is set to PAGE_LOADED.
342 - (void)didFinishWithURL:(const GURL&)currentURL loadSuccess:(BOOL)loadSuccess; 342 - (void)didFinishWithURL:(const GURL&)currentURL loadSuccess:(BOOL)loadSuccess;
343 // Informs the native controller if web usage is allowed or not. 343 // Informs the native controller if web usage is allowed or not.
344 - (void)setNativeControllerWebUsageEnabled:(BOOL)webUsageEnabled; 344 - (void)setNativeControllerWebUsageEnabled:(BOOL)webUsageEnabled;
345 // Evaluates the supplied JavaScript in the web view. Calls |handler| with 345 // Evaluates the supplied JavaScript in the web view. Calls |handler| with
346 // results of the evaluation (which may be nil if the implementing object has no 346 // results of the evaluation (which may be nil if the implementing object has no
347 // way to run the evaluation or the evaluation returns a nil value) or an 347 // way to run the evaluation or the evaluation returns a nil value) or an
348 // NSError if there is an error. The |handler| can be nil. 348 // NSError if there is an error. The |handler| can be nil.
349 - (void)evaluateJavaScript:(NSString*)script 349 - (void)evaluateJavaScript:(NSString*)script
350 JSONResultHandler:(void (^)(scoped_ptr<base::Value>, NSError*))handler; 350 JSONResultHandler:
351 (void (^)(std::unique_ptr<base::Value>, NSError*))handler;
351 // Attempts to handle a script message. Returns YES on success, NO otherwise. 352 // Attempts to handle a script message. Returns YES on success, NO otherwise.
352 - (BOOL)respondToWKScriptMessage:(WKScriptMessage*)scriptMessage; 353 - (BOOL)respondToWKScriptMessage:(WKScriptMessage*)scriptMessage;
353 // Generates the JavaScript string used to update the UIWebView's URL so that it 354 // Generates the JavaScript string used to update the UIWebView's URL so that it
354 // matches the URL displayed in the omnibox and sets window.history.state to 355 // matches the URL displayed in the omnibox and sets window.history.state to
355 // stateObject. Needed for history.pushState() and history.replaceState(). 356 // stateObject. Needed for history.pushState() and history.replaceState().
356 - (NSString*)javascriptToReplaceWebViewURL:(const GURL&)URL 357 - (NSString*)javascriptToReplaceWebViewURL:(const GURL&)URL
357 stateObjectJSON:(NSString*)stateObject; 358 stateObjectJSON:(NSString*)stateObject;
358 // Injects JavaScript into the web view to update the URL to |URL|, to set 359 // Injects JavaScript into the web view to update the URL to |URL|, to set
359 // window.history.state to |stateObject|, and to trigger a popstate() event. 360 // window.history.state to |stateObject|, and to trigger a popstate() event.
360 // Upon the scripts completion, resets |urlOnStartLoading_| and 361 // Upon the scripts completion, resets |urlOnStartLoading_| and
(...skipping 26 matching lines...) Expand all
387 // Sets scroll offset value for webview scroll view from |scrollState|. 388 // Sets scroll offset value for webview scroll view from |scrollState|.
388 - (void)applyWebViewScrollOffsetFromScrollState: 389 - (void)applyWebViewScrollOffsetFromScrollState:
389 (const web::PageScrollState&)scrollState; 390 (const web::PageScrollState&)scrollState;
390 // Asynchronously fetches full width of the rendered web page. 391 // Asynchronously fetches full width of the rendered web page.
391 - (void)fetchWebPageWidthWithCompletionHandler:(void (^)(CGFloat))handler; 392 - (void)fetchWebPageWidthWithCompletionHandler:(void (^)(CGFloat))handler;
392 // Asynchronously fetches information about DOM element for the given point (in 393 // Asynchronously fetches information about DOM element for the given point (in
393 // UIView coordinates). |handler| can not be nil. See |_DOMElementForLastTouch| 394 // UIView coordinates). |handler| can not be nil. See |_DOMElementForLastTouch|
394 // for element format description. 395 // for element format description.
395 - (void)fetchDOMElementAtPoint:(CGPoint)point 396 - (void)fetchDOMElementAtPoint:(CGPoint)point
396 completionHandler: 397 completionHandler:
397 (void (^)(scoped_ptr<base::DictionaryValue>))handler; 398 (void (^)(std::unique_ptr<base::DictionaryValue>))handler;
398 // Extracts context menu information from the given DOM element. 399 // Extracts context menu information from the given DOM element.
399 // result keys are defined in crw_context_menu_provider.h. 400 // result keys are defined in crw_context_menu_provider.h.
400 - (NSDictionary*)contextMenuInfoForElement:(base::DictionaryValue*)element; 401 - (NSDictionary*)contextMenuInfoForElement:(base::DictionaryValue*)element;
401 // Sets the value of |_DOMElementForLastTouch|. 402 // Sets the value of |_DOMElementForLastTouch|.
402 - (void)setDOMElementForLastTouch:(scoped_ptr<base::DictionaryValue>)element; 403 - (void)setDOMElementForLastTouch:
404 (std::unique_ptr<base::DictionaryValue>)element;
403 // Called when the window has determined there was a long-press and context menu 405 // Called when the window has determined there was a long-press and context menu
404 // must be shown. 406 // must be shown.
405 - (void)showContextMenu:(UIGestureRecognizer*)gestureRecognizer; 407 - (void)showContextMenu:(UIGestureRecognizer*)gestureRecognizer;
406 // YES if delegate supports showing context menu by responding to 408 // YES if delegate supports showing context menu by responding to
407 // webController:runContextMenu:atPoint:inView: selector. 409 // webController:runContextMenu:atPoint:inView: selector.
408 - (BOOL)supportsCustomContextMenu; 410 - (BOOL)supportsCustomContextMenu;
409 // Cancels all touch events in the web view (long presses, tapping, scrolling). 411 // Cancels all touch events in the web view (long presses, tapping, scrolling).
410 - (void)cancelAllTouches; 412 - (void)cancelAllTouches;
411 // Returns the referrer for the current page. 413 // Returns the referrer for the current page.
412 - (web::Referrer)currentReferrer; 414 - (web::Referrer)currentReferrer;
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after
566 + (instancetype)allocWithZone:(struct _NSZone*)zone { 568 + (instancetype)allocWithZone:(struct _NSZone*)zone {
567 if (self == [CRWWebController class]) { 569 if (self == [CRWWebController class]) {
568 // This is an abstract class which should not be instantiated directly. 570 // This is an abstract class which should not be instantiated directly.
569 // Callers should create concrete subclasses instead. 571 // Callers should create concrete subclasses instead.
570 NOTREACHED(); 572 NOTREACHED();
571 return nil; 573 return nil;
572 } 574 }
573 return [super allocWithZone:zone]; 575 return [super allocWithZone:zone];
574 } 576 }
575 577
576 - (instancetype)initWithWebState:(scoped_ptr<WebStateImpl>)webState { 578 - (instancetype)initWithWebState:(std::unique_ptr<WebStateImpl>)webState {
577 self = [super init]; 579 self = [super init];
578 if (self) { 580 if (self) {
579 _webStateImpl = std::move(webState); 581 _webStateImpl = std::move(webState);
580 DCHECK(_webStateImpl); 582 DCHECK(_webStateImpl);
581 _webStateImpl->SetWebController(self); 583 _webStateImpl->SetWebController(self);
582 _webStateImpl->InitializeRequestTracker(self); 584 _webStateImpl->InitializeRequestTracker(self);
583 // Load phase when no WebView present is 'loaded' because this represents 585 // Load phase when no WebView present is 'loaded' because this represents
584 // the idle state. 586 // the idle state.
585 _loadPhase = web::PAGE_LOADED; 587 _loadPhase = web::PAGE_LOADED;
586 // Content area is lazily instantiated. 588 // Content area is lazily instantiated.
(...skipping 283 matching lines...) Expand 10 before | Expand all | Expand 10 after
870 872
871 // Tear down web ui (in case this is part of this tab) and web state now, 873 // Tear down web ui (in case this is part of this tab) and web state now,
872 // since the timing of dealloc can't be guaranteed. 874 // since the timing of dealloc can't be guaranteed.
873 _webStateImpl.reset(); 875 _webStateImpl.reset();
874 } 876 }
875 877
876 - (void)checkLinkPresenceUnderGesture:(UIGestureRecognizer*)gestureRecognizer 878 - (void)checkLinkPresenceUnderGesture:(UIGestureRecognizer*)gestureRecognizer
877 completionHandler:(void (^)(BOOL))completionHandler { 879 completionHandler:(void (^)(BOOL))completionHandler {
878 CGPoint webViewPoint = [gestureRecognizer locationInView:self.webView]; 880 CGPoint webViewPoint = [gestureRecognizer locationInView:self.webView];
879 base::WeakNSObject<CRWWebController> weakSelf(self); 881 base::WeakNSObject<CRWWebController> weakSelf(self);
880 [self fetchDOMElementAtPoint:webViewPoint 882 [self
881 completionHandler:^(scoped_ptr<base::DictionaryValue> element) { 883 fetchDOMElementAtPoint:webViewPoint
882 std::string link; 884 completionHandler:^(std::unique_ptr<base::DictionaryValue> element) {
883 BOOL hasLink = 885 std::string link;
884 element && element->GetString("href", &link) && link.size(); 886 BOOL hasLink =
885 completionHandler(hasLink); 887 element && element->GetString("href", &link) && link.size();
886 }]; 888 completionHandler(hasLink);
889 }];
887 } 890 }
888 891
889 - (void)setDOMElementForLastTouch:(scoped_ptr<base::DictionaryValue>)element { 892 - (void)setDOMElementForLastTouch:
893 (std::unique_ptr<base::DictionaryValue>)element {
890 _DOMElementForLastTouch = std::move(element); 894 _DOMElementForLastTouch = std::move(element);
891 } 895 }
892 896
893 - (void)showContextMenu:(UIGestureRecognizer*)gestureRecognizer { 897 - (void)showContextMenu:(UIGestureRecognizer*)gestureRecognizer {
894 // Calling this method if [self supportsCustomContextMenu] returned NO 898 // Calling this method if [self supportsCustomContextMenu] returned NO
895 // is a programmer error. 899 // is a programmer error.
896 DCHECK([self supportsCustomContextMenu]); 900 DCHECK([self supportsCustomContextMenu]);
897 901
898 // We don't want ongoing notification that the long press is held. 902 // We don't want ongoing notification that the long press is held.
899 if ([gestureRecognizer state] != UIGestureRecognizerStateBegan) 903 if ([gestureRecognizer state] != UIGestureRecognizerStateBegan)
(...skipping 944 matching lines...) Expand 10 before | Expand all | Expand 10 after
1844 1848
1845 url::StringPieceReplacements<std::string> emptyRef; 1849 url::StringPieceReplacements<std::string> emptyRef;
1846 emptyRef.SetRefStr(""); 1850 emptyRef.SetRefStr("");
1847 GURL newEndURL = endURL.ReplaceComponents(emptyRef); 1851 GURL newEndURL = endURL.ReplaceComponents(emptyRef);
1848 toItem->SetURL(newEndURL); 1852 toItem->SetURL(newEndURL);
1849 return newEndURL; 1853 return newEndURL;
1850 } 1854 }
1851 1855
1852 - (void)evaluateJavaScript:(NSString*)script 1856 - (void)evaluateJavaScript:(NSString*)script
1853 JSONResultHandler: 1857 JSONResultHandler:
1854 (void (^)(scoped_ptr<base::Value>, NSError*))handler { 1858 (void (^)(std::unique_ptr<base::Value>, NSError*))handler {
1855 [self evaluateJavaScript:script 1859 [self evaluateJavaScript:script
1856 stringResultHandler:^(NSString* stringResult, NSError* error) { 1860 stringResultHandler:^(NSString* stringResult, NSError* error) {
1857 DCHECK(stringResult || error); 1861 DCHECK(stringResult || error);
1858 if (handler) { 1862 if (handler) {
1859 scoped_ptr<base::Value> result( 1863 std::unique_ptr<base::Value> result(
1860 base::JSONReader::Read(base::SysNSStringToUTF8(stringResult))); 1864 base::JSONReader::Read(base::SysNSStringToUTF8(stringResult)));
1861 handler(std::move(result), error); 1865 handler(std::move(result), error);
1862 } 1866 }
1863 }]; 1867 }];
1864 } 1868 }
1865 1869
1866 - (void)addGestureRecognizerToWebView:(UIGestureRecognizer*)recognizer { 1870 - (void)addGestureRecognizerToWebView:(UIGestureRecognizer*)recognizer {
1867 if ([_gestureRecognizers containsObject:recognizer]) 1871 if ([_gestureRecognizers containsObject:recognizer])
1868 return; 1872 return;
1869 1873
(...skipping 253 matching lines...) Expand 10 before | Expand all | Expand 10 after
2123 // Broken out into separate method to catch errors. 2127 // Broken out into separate method to catch errors.
2124 if (![self respondToWKScriptMessage:message]) { 2128 if (![self respondToWKScriptMessage:message]) {
2125 DLOG(WARNING) << "Message from JS not handled due to invalid format"; 2129 DLOG(WARNING) << "Message from JS not handled due to invalid format";
2126 } 2130 }
2127 } 2131 }
2128 2132
2129 - (BOOL)respondToWKScriptMessage:(WKScriptMessage*)scriptMessage { 2133 - (BOOL)respondToWKScriptMessage:(WKScriptMessage*)scriptMessage {
2130 CHECK(scriptMessage.frameInfo.mainFrame); 2134 CHECK(scriptMessage.frameInfo.mainFrame);
2131 int errorCode = 0; 2135 int errorCode = 0;
2132 std::string errorMessage; 2136 std::string errorMessage;
2133 scoped_ptr<base::Value> inputJSONData(base::JSONReader::ReadAndReturnError( 2137 std::unique_ptr<base::Value> inputJSONData(
2134 base::SysNSStringToUTF8(scriptMessage.body), false, &errorCode, 2138 base::JSONReader::ReadAndReturnError(
2135 &errorMessage)); 2139 base::SysNSStringToUTF8(scriptMessage.body), false, &errorCode,
2140 &errorMessage));
2136 if (errorCode) { 2141 if (errorCode) {
2137 DLOG(WARNING) << "JSON parse error: %s" << errorMessage.c_str(); 2142 DLOG(WARNING) << "JSON parse error: %s" << errorMessage.c_str();
2138 return NO; 2143 return NO;
2139 } 2144 }
2140 base::DictionaryValue* message = nullptr; 2145 base::DictionaryValue* message = nullptr;
2141 if (!inputJSONData->GetAsDictionary(&message)) { 2146 if (!inputJSONData->GetAsDictionary(&message)) {
2142 return NO; 2147 return NO;
2143 } 2148 }
2144 std::string windowID; 2149 std::string windowID;
2145 message->GetString("crwWindowId", &windowID); 2150 message->GetString("crwWindowId", &windowID);
(...skipping 886 matching lines...) Expand 10 before | Expand all | Expand 10 after
3032 return YES; 3037 return YES;
3033 } 3038 }
3034 3039
3035 // This is custom long press gesture recognizer. By the time the gesture is 3040 // This is custom long press gesture recognizer. By the time the gesture is
3036 // recognized the web controller needs to know if there is a link under the 3041 // recognized the web controller needs to know if there is a link under the
3037 // touch. If there a link, the web controller will reject system's context 3042 // touch. If there a link, the web controller will reject system's context
3038 // menu and show another one. If for some reason context menu info is not 3043 // menu and show another one. If for some reason context menu info is not
3039 // fetched - system context menu will be shown. 3044 // fetched - system context menu will be shown.
3040 [self setDOMElementForLastTouch:nullptr]; 3045 [self setDOMElementForLastTouch:nullptr];
3041 base::WeakNSObject<CRWWebController> weakSelf(self); 3046 base::WeakNSObject<CRWWebController> weakSelf(self);
3042 [self fetchDOMElementAtPoint:[touch locationInView:self.webView] 3047 [self
3043 completionHandler:^(scoped_ptr<base::DictionaryValue> element) { 3048 fetchDOMElementAtPoint:[touch locationInView:self.webView]
3044 [weakSelf setDOMElementForLastTouch:std::move(element)]; 3049 completionHandler:^(std::unique_ptr<base::DictionaryValue> element) {
3045 }]; 3050 [weakSelf setDOMElementForLastTouch:std::move(element)];
3051 }];
3046 return YES; 3052 return YES;
3047 } 3053 }
3048 3054
3049 - (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer*)gestureRecognizer { 3055 - (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer*)gestureRecognizer {
3050 // Expect only _contextMenuRecognizer. 3056 // Expect only _contextMenuRecognizer.
3051 DCHECK([gestureRecognizer isEqual:_contextMenuRecognizer]); 3057 DCHECK([gestureRecognizer isEqual:_contextMenuRecognizer]);
3052 if (!self.webView || ![self supportsCustomContextMenu]) { 3058 if (!self.webView || ![self supportsCustomContextMenu]) {
3053 // Show the context menu iff currently displaying a web view. 3059 // Show the context menu iff currently displaying a web view.
3054 // Do nothing for native views. 3060 // Do nothing for native views.
3055 return NO; 3061 return NO;
(...skipping 525 matching lines...) Expand 10 before | Expand all | Expand 10 after
3581 } 3587 }
3582 3588
3583 [self evaluateJavaScript:@"__gCrWeb.getPageWidth();" 3589 [self evaluateJavaScript:@"__gCrWeb.getPageWidth();"
3584 stringResultHandler:^(NSString* pageWidthAsString, NSError*) { 3590 stringResultHandler:^(NSString* pageWidthAsString, NSError*) {
3585 handler([pageWidthAsString floatValue]); 3591 handler([pageWidthAsString floatValue]);
3586 }]; 3592 }];
3587 } 3593 }
3588 3594
3589 - (void)fetchDOMElementAtPoint:(CGPoint)point 3595 - (void)fetchDOMElementAtPoint:(CGPoint)point
3590 completionHandler: 3596 completionHandler:
3591 (void (^)(scoped_ptr<base::DictionaryValue>))handler { 3597 (void (^)(std::unique_ptr<base::DictionaryValue>))handler {
3592 DCHECK(handler); 3598 DCHECK(handler);
3593 // Convert point into web page's coordinate system (which may be scaled and/or 3599 // Convert point into web page's coordinate system (which may be scaled and/or
3594 // scrolled). 3600 // scrolled).
3595 CGPoint scrollOffset = self.scrollPosition; 3601 CGPoint scrollOffset = self.scrollPosition;
3596 CGFloat webViewContentWidth = self.webScrollView.contentSize.width; 3602 CGFloat webViewContentWidth = self.webScrollView.contentSize.width;
3597 base::WeakNSObject<CRWWebController> weakSelf(self); 3603 base::WeakNSObject<CRWWebController> weakSelf(self);
3598 [self fetchWebPageWidthWithCompletionHandler:^(CGFloat pageWidth) { 3604 [self fetchWebPageWidthWithCompletionHandler:^(CGFloat pageWidth) {
3599 CGFloat scale = pageWidth / webViewContentWidth; 3605 CGFloat scale = pageWidth / webViewContentWidth;
3600 CGPoint localPoint = CGPointMake((point.x + scrollOffset.x) * scale, 3606 CGPoint localPoint = CGPointMake((point.x + scrollOffset.x) * scale,
3601 (point.y + scrollOffset.y) * scale); 3607 (point.y + scrollOffset.y) * scale);
3602 NSString* const kGetElementScript = 3608 NSString* const kGetElementScript =
3603 [NSString stringWithFormat:@"__gCrWeb.getElementFromPoint(%g, %g);", 3609 [NSString stringWithFormat:@"__gCrWeb.getElementFromPoint(%g, %g);",
3604 localPoint.x, localPoint.y]; 3610 localPoint.x, localPoint.y];
3605 [weakSelf evaluateJavaScript:kGetElementScript 3611 [weakSelf
3606 JSONResultHandler:^(scoped_ptr<base::Value> element, NSError*) { 3612 evaluateJavaScript:kGetElementScript
3607 // Release raw element and call handler with DictionaryValue. 3613 JSONResultHandler:^(std::unique_ptr<base::Value> element, NSError*) {
3608 scoped_ptr<base::DictionaryValue> elementAsDict; 3614 // Release raw element and call handler with DictionaryValue.
3609 if (element) { 3615 std::unique_ptr<base::DictionaryValue> elementAsDict;
3610 base::DictionaryValue* elementAsDictPtr = nullptr; 3616 if (element) {
3611 element.release()->GetAsDictionary(&elementAsDictPtr); 3617 base::DictionaryValue* elementAsDictPtr = nullptr;
3612 // |rawElement| and |elementPtr| now point to the same 3618 element.release()->GetAsDictionary(&elementAsDictPtr);
3613 // memory. |elementPtr| ownership will be transferred to 3619 // |rawElement| and |elementPtr| now point to the same
3614 // |element| scoped_ptr. 3620 // memory. |elementPtr| ownership will be transferred to
3615 elementAsDict.reset(elementAsDictPtr); 3621 // |element| scoped_ptr.
3616 } 3622 elementAsDict.reset(elementAsDictPtr);
3617 handler(std::move(elementAsDict)); 3623 }
3618 }]; 3624 handler(std::move(elementAsDict));
3625 }];
3619 }]; 3626 }];
3620 } 3627 }
3621 3628
3622 - (NSDictionary*)contextMenuInfoForElement:(base::DictionaryValue*)element { 3629 - (NSDictionary*)contextMenuInfoForElement:(base::DictionaryValue*)element {
3623 DCHECK(element); 3630 DCHECK(element);
3624 NSMutableDictionary* mutableInfo = [NSMutableDictionary dictionary]; 3631 NSMutableDictionary* mutableInfo = [NSMutableDictionary dictionary];
3625 NSString* title = nil; 3632 NSString* title = nil;
3626 std::string href; 3633 std::string href;
3627 if (element->GetString("href", &href)) { 3634 if (element->GetString("href", &href)) {
3628 mutableInfo[web::kContextLinkURLString] = base::SysUTF8ToNSString(href); 3635 mutableInfo[web::kContextLinkURLString] = base::SysUTF8ToNSString(href);
(...skipping 303 matching lines...) Expand 10 before | Expand all | Expand 10 after
3932 if ([MIMEType isEqualToString:@"text/html"] || 3939 if ([MIMEType isEqualToString:@"text/html"] ||
3933 [MIMEType isEqualToString:@"application/xhtml+xml"] || 3940 [MIMEType isEqualToString:@"application/xhtml+xml"] ||
3934 [MIMEType isEqualToString:@"application/xml"]) { 3941 [MIMEType isEqualToString:@"application/xml"]) {
3935 return web::WEB_VIEW_DOCUMENT_TYPE_HTML; 3942 return web::WEB_VIEW_DOCUMENT_TYPE_HTML;
3936 } 3943 }
3937 3944
3938 return web::WEB_VIEW_DOCUMENT_TYPE_GENERIC; 3945 return web::WEB_VIEW_DOCUMENT_TYPE_GENERIC;
3939 } 3946 }
3940 3947
3941 @end 3948 @end
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698