OLD | NEW |
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/chrome/browser/ui/toolbar/web_toolbar_controller.h" | 5 #import "ios/chrome/browser/ui/toolbar/web_toolbar_controller.h" |
6 | 6 |
7 #import <CoreLocation/CoreLocation.h> | 7 #import <CoreLocation/CoreLocation.h> |
8 #include <QuartzCore/QuartzCore.h> | 8 #include <QuartzCore/QuartzCore.h> |
9 | 9 |
10 #include <stdint.h> | 10 #include <stdint.h> |
11 | 11 |
12 #include <algorithm> | 12 #include <algorithm> |
13 #include <memory> | 13 #include <memory> |
14 | 14 |
15 #include "base/command_line.h" | 15 #include "base/command_line.h" |
| 16 #include "base/ios/weak_nsobject.h" |
16 #include "base/logging.h" | 17 #include "base/logging.h" |
17 #include "base/mac/bundle_locations.h" | 18 #include "base/mac/bundle_locations.h" |
18 #include "base/mac/foundation_util.h" | 19 #include "base/mac/foundation_util.h" |
19 #include "base/memory/ptr_util.h" | 20 #include "base/memory/ptr_util.h" |
20 #include "base/metrics/histogram_macros.h" | 21 #include "base/metrics/histogram_macros.h" |
21 #include "base/metrics/user_metrics.h" | 22 #include "base/metrics/user_metrics.h" |
22 #include "base/metrics/user_metrics_action.h" | 23 #include "base/metrics/user_metrics_action.h" |
23 #include "base/strings/sys_string_conversions.h" | 24 #include "base/strings/sys_string_conversions.h" |
24 #include "components/google/core/browser/google_util.h" | 25 #include "components/google/core/browser/google_util.h" |
25 #include "components/omnibox/browser/omnibox_edit_model.h" | 26 #include "components/omnibox/browser/omnibox_edit_model.h" |
(...skipping 10 matching lines...) Expand all Loading... |
36 #import "ios/chrome/browser/ui/animation_util.h" | 37 #import "ios/chrome/browser/ui/animation_util.h" |
37 #import "ios/chrome/browser/ui/colors/MDCPalette+CrAdditions.h" | 38 #import "ios/chrome/browser/ui/colors/MDCPalette+CrAdditions.h" |
38 #import "ios/chrome/browser/ui/commands/UIKit+ChromeExecuteCommand.h" | 39 #import "ios/chrome/browser/ui/commands/UIKit+ChromeExecuteCommand.h" |
39 #import "ios/chrome/browser/ui/commands/generic_chrome_command.h" | 40 #import "ios/chrome/browser/ui/commands/generic_chrome_command.h" |
40 #include "ios/chrome/browser/ui/commands/ios_command_ids.h" | 41 #include "ios/chrome/browser/ui/commands/ios_command_ids.h" |
41 #import "ios/chrome/browser/ui/history/tab_history_popup_controller.h" | 42 #import "ios/chrome/browser/ui/history/tab_history_popup_controller.h" |
42 #import "ios/chrome/browser/ui/image_util.h" | 43 #import "ios/chrome/browser/ui/image_util.h" |
43 #import "ios/chrome/browser/ui/keyboard/hardware_keyboard_watcher.h" | 44 #import "ios/chrome/browser/ui/keyboard/hardware_keyboard_watcher.h" |
44 #include "ios/chrome/browser/ui/omnibox/location_bar_controller_impl.h" | 45 #include "ios/chrome/browser/ui/omnibox/location_bar_controller_impl.h" |
45 #include "ios/chrome/browser/ui/omnibox/omnibox_view_ios.h" | 46 #include "ios/chrome/browser/ui/omnibox/omnibox_view_ios.h" |
46 #import "ios/chrome/browser/ui/popup_menu/popup_menu_view.h" | |
47 #import "ios/chrome/browser/ui/reversed_animation.h" | 47 #import "ios/chrome/browser/ui/reversed_animation.h" |
48 #include "ios/chrome/browser/ui/rtl_geometry.h" | 48 #include "ios/chrome/browser/ui/rtl_geometry.h" |
49 #import "ios/chrome/browser/ui/toolbar/toolbar_controller+protected.h" | 49 #import "ios/chrome/browser/ui/toolbar/toolbar_controller+protected.h" |
50 #import "ios/chrome/browser/ui/toolbar/toolbar_controller.h" | 50 #import "ios/chrome/browser/ui/toolbar/toolbar_controller.h" |
51 #import "ios/chrome/browser/ui/toolbar/toolbar_model_ios.h" | 51 #import "ios/chrome/browser/ui/toolbar/toolbar_model_ios.h" |
52 #include "ios/chrome/browser/ui/toolbar/toolbar_resource_macros.h" | 52 #include "ios/chrome/browser/ui/toolbar/toolbar_resource_macros.h" |
53 #include "ios/chrome/browser/ui/ui_util.h" | 53 #include "ios/chrome/browser/ui/ui_util.h" |
54 #import "ios/chrome/browser/ui/uikit_ui_util.h" | 54 #import "ios/chrome/browser/ui/uikit_ui_util.h" |
55 #import "ios/chrome/browser/ui/url_loader.h" | 55 #import "ios/chrome/browser/ui/url_loader.h" |
56 #import "ios/chrome/browser/ui/voice/text_to_speech_player.h" | 56 #import "ios/chrome/browser/ui/voice/text_to_speech_player.h" |
57 #import "ios/chrome/browser/ui/voice/voice_search_notification_names.h" | 57 #import "ios/chrome/browser/ui/voice/voice_search_notification_names.h" |
58 #import "ios/chrome/common/material_timing.h" | 58 #import "ios/chrome/common/material_timing.h" |
59 #include "ios/chrome/grit/ios_strings.h" | 59 #include "ios/chrome/grit/ios_strings.h" |
60 #import "ios/public/provider/chrome/browser/chrome_browser_provider.h" | 60 #import "ios/public/provider/chrome/browser/chrome_browser_provider.h" |
61 #import "ios/public/provider/chrome/browser/images/branded_image_provider.h" | 61 #import "ios/public/provider/chrome/browser/images/branded_image_provider.h" |
62 #import "ios/public/provider/chrome/browser/voice/voice_search_provider.h" | 62 #import "ios/public/provider/chrome/browser/voice/voice_search_provider.h" |
63 #include "ios/shared/chrome/browser/ui/omnibox/location_bar_controller.h" | 63 #include "ios/shared/chrome/browser/ui/omnibox/location_bar_controller.h" |
64 #include "ios/shared/chrome/browser/ui/omnibox/location_bar_delegate.h" | 64 #include "ios/shared/chrome/browser/ui/omnibox/location_bar_delegate.h" |
65 #import "ios/third_party/material_components_ios/src/components/Palettes/src/Mat
erialPalettes.h" | 65 #import "ios/third_party/material_components_ios/src/components/Palettes/src/Mat
erialPalettes.h" |
66 #import "ios/third_party/material_components_ios/src/components/ProgressView/src
/MaterialProgressView.h" | 66 #import "ios/third_party/material_components_ios/src/components/ProgressView/src
/MaterialProgressView.h" |
67 #import "ios/third_party/material_components_ios/src/components/Typography/src/M
aterialTypography.h" | 67 #import "ios/third_party/material_components_ios/src/components/Typography/src/M
aterialTypography.h" |
68 #include "ios/web/public/referrer.h" | 68 #include "ios/web/public/referrer.h" |
69 #import "ios/web/public/web_state/web_state.h" | 69 #import "ios/web/public/web_state/web_state.h" |
70 #import "net/base/mac/url_conversions.h" | 70 #import "net/base/mac/url_conversions.h" |
71 #include "ui/base/l10n/l10n_util.h" | 71 #include "ui/base/l10n/l10n_util.h" |
72 #include "ui/base/page_transition_types.h" | 72 #include "ui/base/page_transition_types.h" |
73 #import "ui/gfx/ios/NSString+CrStringDrawing.h" | 73 #import "ui/gfx/ios/NSString+CrStringDrawing.h" |
74 | 74 |
75 #if !defined(__has_feature) || !__has_feature(objc_arc) | |
76 #error "This file requires ARC support." | |
77 #endif | |
78 | |
79 using base::UserMetricsAction; | 75 using base::UserMetricsAction; |
80 using ios::material::TimingFunction; | 76 using ios::material::TimingFunction; |
81 | 77 |
82 NSString* const kTabHistoryPopupWillShowNotification = | 78 NSString* const kTabHistoryPopupWillShowNotification = |
83 @"kTabHistoryPopupWillShowNotification"; | 79 @"kTabHistoryPopupWillShowNotification"; |
84 NSString* const kTabHistoryPopupWillHideNotification = | 80 NSString* const kTabHistoryPopupWillHideNotification = |
85 @"kTabHistoryPopupWillHideNotification"; | 81 @"kTabHistoryPopupWillHideNotification"; |
86 const CGFloat kiPhoneOmniboxPlaceholderColorBrightness = 150 / 255.0; | 82 const CGFloat kiPhoneOmniboxPlaceholderColorBrightness = 150 / 255.0; |
87 | 83 |
88 // The histogram recording CLAuthorizationStatus for omnibox queries. | 84 // The histogram recording CLAuthorizationStatus for omnibox queries. |
(...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
239 // switch the main bots to Xcode 8. | 235 // switch the main bots to Xcode 8. |
240 #if defined(__IPHONE_10_0) && (__IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0) | 236 #if defined(__IPHONE_10_0) && (__IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0) |
241 @interface WebToolbarController ()<CAAnimationDelegate> | 237 @interface WebToolbarController ()<CAAnimationDelegate> |
242 @end | 238 @end |
243 #endif | 239 #endif |
244 | 240 |
245 @interface WebToolbarController ()<LocationBarDelegate, | 241 @interface WebToolbarController ()<LocationBarDelegate, |
246 OmniboxPopupPositioner, | 242 OmniboxPopupPositioner, |
247 ToolbarFrameDelegate> { | 243 ToolbarFrameDelegate> { |
248 // Top-level view for web content. | 244 // Top-level view for web content. |
249 UIView* _webToolbar; | 245 base::scoped_nsobject<UIView> _webToolbar; |
250 UIButton* _backButton; | 246 base::scoped_nsobject<UIButton> _backButton; |
251 UIButton* _forwardButton; | 247 base::scoped_nsobject<UIButton> _forwardButton; |
252 UIButton* _reloadButton; | 248 base::scoped_nsobject<UIButton> _reloadButton; |
253 UIButton* _stopButton; | 249 base::scoped_nsobject<UIButton> _stopButton; |
254 UIButton* _starButton; | 250 base::scoped_nsobject<UIButton> _starButton; |
255 UIButton* _voiceSearchButton; | 251 base::scoped_nsobject<UIButton> _voiceSearchButton; |
256 OmniboxTextFieldIOS* _omniBox; | 252 base::scoped_nsobject<OmniboxTextFieldIOS> _omniBox; |
257 UIButton* _cancelButton; | 253 base::scoped_nsobject<UIButton> _cancelButton; |
258 UIView* _keyBoardAccessoryView; | 254 base::scoped_nsobject<UIView> _keyBoardAccessoryView; |
259 UIButton* _keyboardVoiceSearchButton; | 255 base::scoped_nsobject<UIButton> _keyboardVoiceSearchButton; |
260 // Progress bar used to show what fraction of the page has loaded. | 256 // Progress bar used to show what fraction of the page has loaded. |
261 MDCProgressView* _determinateProgressView; | 257 base::scoped_nsobject<MDCProgressView> _determinateProgressView; |
262 UIImageView* _omniboxBackground; | 258 base::scoped_nsobject<UIImageView> _omniboxBackground; |
263 BOOL _prerenderAnimating; | 259 BOOL _prerenderAnimating; |
264 UIImageView* _incognitoIcon; | 260 base::scoped_nsobject<UIImageView> _incognitoIcon; |
265 UIView* _clippingView; | 261 base::scoped_nsobject<UIView> _clippingView; |
266 | 262 |
267 std::unique_ptr<LocationBarController> _locationBar; | 263 std::unique_ptr<LocationBarController> _locationBar; |
268 BOOL _initialLayoutComplete; | 264 BOOL _initialLayoutComplete; |
269 // If |YES|, toolbar is incognito. | 265 // If |YES|, toolbar is incognito. |
270 BOOL _incognito; | 266 BOOL _incognito; |
271 | 267 |
272 // If set to |YES|, disables animations that tests would otherwise trigger. | 268 // If set to |YES|, disables animations that tests would otherwise trigger. |
273 BOOL _unitTesting; | 269 BOOL _unitTesting; |
274 | 270 |
275 // If set to |YES|, text to speech is currently playing and the toolbar voice | 271 // If set to |YES|, text to speech is currently playing and the toolbar voice |
276 // icon should indicate so. | 272 // icon should indicate so. |
277 BOOL _isTTSPlaying; | 273 BOOL _isTTSPlaying; |
278 | 274 |
279 // Keeps track of whether or not the back button's images have been reversed. | 275 // Keeps track of whether or not the back button's images have been reversed. |
280 ToolbarButtonMode _backButtonMode; | 276 ToolbarButtonMode _backButtonMode; |
281 | 277 |
282 // Keeps track of whether or not the forward button's images have been | 278 // Keeps track of whether or not the forward button's images have been |
283 // reversed. | 279 // reversed. |
284 ToolbarButtonMode _forwardButtonMode; | 280 ToolbarButtonMode _forwardButtonMode; |
285 | 281 |
286 // Keeps track of last known trait collection used by the subviews. | 282 // Keeps track of last known trait collection used by the subviews. |
287 UITraitCollection* _lastKnownTraitCollection; | 283 base::scoped_nsobject<UITraitCollection> _lastKnownTraitCollection; |
288 | 284 |
289 // A snapshot of the current toolbar view. Only valid for phone, will be nil | 285 // A snapshot of the current toolbar view. Only valid for phone, will be nil |
290 // if on tablet. | 286 // if on tablet. |
291 UIImage* _snapshot; | 287 base::scoped_nsobject<UIImage> _snapshot; |
292 // A hash of the state of the toolbar when the snapshot was taken. | 288 // A hash of the state of the toolbar when the snapshot was taken. |
293 uint32_t _snapshotHash; | 289 uint32_t _snapshotHash; |
294 | 290 |
295 // View controller for displaying tab history when the user long presses the | 291 // View controller for displaying tab history when the user long presses the |
296 // back or forward button. nil if not visible. | 292 // back or forward button. nil if not visible. |
297 TabHistoryPopupController* _tabHistoryPopupController; | 293 base::scoped_nsobject<TabHistoryPopupController> _tabHistoryPopupController; |
298 | 294 |
299 // Hardware keyboard watcher, to detect the type of keyboard currently | 295 // Hardware keyboard watcher, to detect the type of keyboard currently |
300 // attached. | 296 // attached. |
301 HardwareKeyboardWatcher* _hardwareKeyboardWatcher; | 297 base::scoped_nsobject<HardwareKeyboardWatcher> _hardwareKeyboardWatcher; |
302 | 298 |
303 // The current browser state. | 299 // The current browser state. |
304 ios::ChromeBrowserState* _browserState; // weak | 300 ios::ChromeBrowserState* _browserState; // weak |
305 } | 301 } |
306 | 302 |
307 // Accessor for cancel button. Handles lazy initialization. | 303 // Accessor for cancel button. Handles lazy initialization. |
308 - (UIButton*)cancelButton; | 304 - (UIButton*)cancelButton; |
309 // Handler called after user pressed the cancel button. | 305 // Handler called after user pressed the cancel button. |
310 - (void)cancelButtonPressed:(id)sender; | 306 - (void)cancelButtonPressed:(id)sender; |
311 - (void)layoutCancelButton; | 307 - (void)layoutCancelButton; |
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
392 : ToolbarControllerStyleLightMode)]; | 388 : ToolbarControllerStyleLightMode)]; |
393 if (!self) | 389 if (!self) |
394 return nil; | 390 return nil; |
395 | 391 |
396 self.readingListModel = | 392 self.readingListModel = |
397 ReadingListModelFactory::GetForBrowserState(browserState); | 393 ReadingListModelFactory::GetForBrowserState(browserState); |
398 | 394 |
399 InterfaceIdiom idiom = IsIPadIdiom() ? IPAD_IDIOM : IPHONE_IDIOM; | 395 InterfaceIdiom idiom = IsIPadIdiom() ? IPAD_IDIOM : IPHONE_IDIOM; |
400 // Note that |_webToolbar| gets its frame set to -specificControlArea later in | 396 // Note that |_webToolbar| gets its frame set to -specificControlArea later in |
401 // this method. | 397 // this method. |
402 _webToolbar = | 398 _webToolbar.reset([[UIView alloc] |
403 [[UIView alloc] initWithFrame:LayoutRectGetRect(kWebToolbarFrame[idiom])]; | 399 initWithFrame:LayoutRectGetRect(kWebToolbarFrame[idiom])]); |
404 UIColor* textColor = | 400 UIColor* textColor = |
405 _incognito | 401 _incognito |
406 ? [UIColor whiteColor] | 402 ? [UIColor whiteColor] |
407 : [UIColor colorWithWhite:0 alpha:[MDCTypography body1FontOpacity]]; | 403 : [UIColor colorWithWhite:0 alpha:[MDCTypography body1FontOpacity]]; |
408 UIColor* tintColor = _incognito ? textColor : nil; | 404 UIColor* tintColor = _incognito ? textColor : nil; |
409 CGRect omniboxRect = LayoutRectGetRect(kOmniboxFrame[idiom]); | 405 CGRect omniboxRect = LayoutRectGetRect(kOmniboxFrame[idiom]); |
410 _omniBox = | 406 _omniBox.reset([[OmniboxTextFieldIOS alloc] |
411 [[OmniboxTextFieldIOS alloc] initWithFrame:omniboxRect | 407 initWithFrame:omniboxRect |
412 font:[MDCTypography subheadFont] | 408 font:[MDCTypography subheadFont] |
413 textColor:textColor | 409 textColor:textColor |
414 tintColor:tintColor]; | 410 tintColor:tintColor]); |
415 if (_incognito) { | 411 if (_incognito) { |
416 [_omniBox setIncognito:YES]; | 412 [_omniBox setIncognito:YES]; |
417 [_omniBox | 413 [_omniBox |
418 setSelectedTextBackgroundColor:[UIColor colorWithWhite:1 alpha:0.1]]; | 414 setSelectedTextBackgroundColor:[UIColor colorWithWhite:1 alpha:0.1]]; |
419 [_omniBox setPlaceholderTextColor:[UIColor colorWithWhite:1 alpha:0.5]]; | 415 [_omniBox setPlaceholderTextColor:[UIColor colorWithWhite:1 alpha:0.5]]; |
420 } else if (!IsIPadIdiom()) { | 416 } else if (!IsIPadIdiom()) { |
421 // Set placeholder text color to match fakebox placeholder text color when | 417 // Set placeholder text color to match fakebox placeholder text color when |
422 // on iPhone and in regular mode. | 418 // on iPhone and in regular mode. |
423 UIColor* placeholderTextColor = | 419 UIColor* placeholderTextColor = |
424 [UIColor colorWithWhite:kiPhoneOmniboxPlaceholderColorBrightness | 420 [UIColor colorWithWhite:kiPhoneOmniboxPlaceholderColorBrightness |
425 alpha:1.0]; | 421 alpha:1.0]; |
426 [_omniBox setPlaceholderTextColor:placeholderTextColor]; | 422 [_omniBox setPlaceholderTextColor:placeholderTextColor]; |
427 } | 423 } |
428 _backButton = [[UIButton alloc] | 424 _backButton.reset([[UIButton alloc] |
429 initWithFrame:LayoutRectGetRect(kBackButtonFrame[idiom])]; | 425 initWithFrame:LayoutRectGetRect(kBackButtonFrame[idiom])]); |
430 [_backButton setAutoresizingMask:UIViewAutoresizingFlexibleTrailingMargin() | | 426 [_backButton setAutoresizingMask:UIViewAutoresizingFlexibleTrailingMargin() | |
431 UIViewAutoresizingFlexibleTopMargin | | 427 UIViewAutoresizingFlexibleTopMargin | |
432 UIViewAutoresizingFlexibleBottomMargin]; | 428 UIViewAutoresizingFlexibleBottomMargin]; |
433 // Note that the forward button gets repositioned when -layoutOmnibox is | 429 // Note that the forward button gets repositioned when -layoutOmnibox is |
434 // called. | 430 // called. |
435 _forwardButton = [[UIButton alloc] | 431 _forwardButton.reset([[UIButton alloc] |
436 initWithFrame:LayoutRectGetRect(kForwardButtonFrame[idiom])]; | 432 initWithFrame:LayoutRectGetRect(kForwardButtonFrame[idiom])]); |
437 [_forwardButton | 433 [_forwardButton |
438 setAutoresizingMask:UIViewAutoresizingFlexibleTrailingMargin() | | 434 setAutoresizingMask:UIViewAutoresizingFlexibleTrailingMargin() | |
439 UIViewAutoresizingFlexibleBottomMargin]; | 435 UIViewAutoresizingFlexibleBottomMargin]; |
440 | 436 |
441 [_webToolbar addSubview:_backButton]; | 437 [_webToolbar addSubview:_backButton]; |
442 [_webToolbar addSubview:_forwardButton]; | 438 [_webToolbar addSubview:_forwardButton]; |
443 | 439 |
444 // _omniboxBackground needs to be added under _omniBox so as not to cover up | 440 // _omniboxBackground needs to be added under _omniBox so as not to cover up |
445 // _omniBox. | 441 // _omniBox. |
446 _omniboxBackground = [[UIImageView alloc] initWithFrame:omniboxRect]; | 442 _omniboxBackground.reset([[UIImageView alloc] initWithFrame:omniboxRect]); |
447 [_omniboxBackground | 443 [_omniboxBackground |
448 setAutoresizingMask:UIViewAutoresizingFlexibleWidth | | 444 setAutoresizingMask:UIViewAutoresizingFlexibleWidth | |
449 UIViewAutoresizingFlexibleBottomMargin]; | 445 UIViewAutoresizingFlexibleBottomMargin]; |
450 | 446 |
451 if (idiom == IPAD_IDIOM) { | 447 if (idiom == IPAD_IDIOM) { |
452 [_webToolbar addSubview:_omniboxBackground]; | 448 [_webToolbar addSubview:_omniboxBackground]; |
453 } else { | 449 } else { |
454 [_backButton setImageEdgeInsets:UIEdgeInsetsMakeDirected(0, 0, 0, -9)]; | 450 [_backButton setImageEdgeInsets:UIEdgeInsetsMakeDirected(0, 0, 0, -9)]; |
455 [_forwardButton setImageEdgeInsets:UIEdgeInsetsMakeDirected(0, -7, 0, 0)]; | 451 [_forwardButton setImageEdgeInsets:UIEdgeInsetsMakeDirected(0, -7, 0, 0)]; |
456 CGRect clippingFrame = | 452 CGRect clippingFrame = |
457 RectShiftedUpAndResizedForStatusBar(kToolbarFrame[idiom]); | 453 RectShiftedUpAndResizedForStatusBar(kToolbarFrame[idiom]); |
458 _clippingView = [[UIView alloc] initWithFrame:clippingFrame]; | 454 _clippingView.reset([[UIView alloc] initWithFrame:clippingFrame]); |
459 [_clippingView setAutoresizingMask:UIViewAutoresizingFlexibleWidth | | 455 [_clippingView setAutoresizingMask:UIViewAutoresizingFlexibleWidth | |
460 UIViewAutoresizingFlexibleBottomMargin]; | 456 UIViewAutoresizingFlexibleBottomMargin]; |
461 [_clippingView setClipsToBounds:YES]; | 457 [_clippingView setClipsToBounds:YES]; |
462 [_clippingView setUserInteractionEnabled:NO]; | 458 [_clippingView setUserInteractionEnabled:NO]; |
463 [_webToolbar addSubview:_clippingView]; | 459 [_webToolbar addSubview:_clippingView]; |
464 | 460 |
465 CGRect omniboxBackgroundFrame = | 461 CGRect omniboxBackgroundFrame = |
466 RectShiftedDownForStatusBar([_omniboxBackground frame]); | 462 RectShiftedDownForStatusBar([_omniboxBackground frame]); |
467 [_omniboxBackground setFrame:omniboxBackgroundFrame]; | 463 [_omniboxBackground setFrame:omniboxBackgroundFrame]; |
468 [_clippingView addSubview:_omniboxBackground]; | 464 [_clippingView addSubview:_omniboxBackground]; |
469 [self.view | 465 [self.view |
470 setBackgroundColor:[UIColor colorWithWhite:kNTPBackgroundColorBrightness | 466 setBackgroundColor:[UIColor colorWithWhite:kNTPBackgroundColorBrightness |
471 alpha:1.0]]; | 467 alpha:1.0]]; |
472 | 468 |
473 if (_incognito) { | 469 if (_incognito) { |
474 [self.view | 470 [self.view |
475 setBackgroundColor: | 471 setBackgroundColor: |
476 [UIColor colorWithWhite:kNTPBackgroundColorBrightnessIncognito | 472 [UIColor colorWithWhite:kNTPBackgroundColorBrightnessIncognito |
477 alpha:1.0]]; | 473 alpha:1.0]]; |
478 _incognitoIcon = [[UIImageView alloc] | 474 _incognitoIcon.reset([[UIImageView alloc] |
479 initWithImage:[UIImage imageNamed:@"incognito_marker_typing"]]; | 475 initWithImage:[UIImage imageNamed:@"incognito_marker_typing"]]); |
480 [_incognitoIcon setAlpha:0]; | 476 [_incognitoIcon setAlpha:0]; |
481 [_incognitoIcon | 477 [_incognitoIcon |
482 setAutoresizingMask:UIViewAutoresizingFlexibleTrailingMargin()]; | 478 setAutoresizingMask:UIViewAutoresizingFlexibleTrailingMargin()]; |
483 [self layoutIncognitoIcon]; | 479 [self layoutIncognitoIcon]; |
484 [_webToolbar addSubview:_incognitoIcon]; | 480 [_webToolbar addSubview:_incognitoIcon]; |
485 } | 481 } |
486 } | 482 } |
487 | 483 |
488 [_webToolbar addSubview:_omniBox]; | 484 [_webToolbar addSubview:_omniBox]; |
489 | 485 |
490 [_backButton setEnabled:NO]; | 486 [_backButton setEnabled:NO]; |
491 [_forwardButton setEnabled:NO]; | 487 [_forwardButton setEnabled:NO]; |
492 | 488 |
493 if (idiom == IPAD_IDIOM) { | 489 if (idiom == IPAD_IDIOM) { |
494 // Note that the reload button gets repositioned when -layoutOmnibox is | 490 // Note that the reload button gets repositioned when -layoutOmnibox is |
495 // called. | 491 // called. |
496 _reloadButton = [[UIButton alloc] | 492 _reloadButton.reset([[UIButton alloc] |
497 initWithFrame:LayoutRectGetRect(kStopReloadButtonFrame)]; | 493 initWithFrame:LayoutRectGetRect(kStopReloadButtonFrame)]); |
498 [_reloadButton | 494 [_reloadButton |
499 setAutoresizingMask:UIViewAutoresizingFlexibleTrailingMargin() | | 495 setAutoresizingMask:UIViewAutoresizingFlexibleTrailingMargin() | |
500 UIViewAutoresizingFlexibleBottomMargin]; | 496 UIViewAutoresizingFlexibleBottomMargin]; |
501 _stopButton = [[UIButton alloc] | 497 _stopButton.reset([[UIButton alloc] |
502 initWithFrame:LayoutRectGetRect(kStopReloadButtonFrame)]; | 498 initWithFrame:LayoutRectGetRect(kStopReloadButtonFrame)]); |
503 [_stopButton | 499 [_stopButton |
504 setAutoresizingMask:UIViewAutoresizingFlexibleTrailingMargin() | | 500 setAutoresizingMask:UIViewAutoresizingFlexibleTrailingMargin() | |
505 UIViewAutoresizingFlexibleBottomMargin]; | 501 UIViewAutoresizingFlexibleBottomMargin]; |
506 _starButton = | 502 _starButton.reset( |
507 [[UIButton alloc] initWithFrame:LayoutRectGetRect(kStarButtonFrame)]; | 503 [[UIButton alloc] initWithFrame:LayoutRectGetRect(kStarButtonFrame)]); |
508 [_starButton setAutoresizingMask:UIViewAutoresizingFlexibleBottomMargin | | 504 [_starButton setAutoresizingMask:UIViewAutoresizingFlexibleBottomMargin | |
509 UIViewAutoresizingFlexibleLeadingMargin()]; | 505 UIViewAutoresizingFlexibleLeadingMargin()]; |
510 _voiceSearchButton = [[UIButton alloc] | 506 _voiceSearchButton.reset([[UIButton alloc] |
511 initWithFrame:LayoutRectGetRect(kVoiceSearchButtonFrame)]; | 507 initWithFrame:LayoutRectGetRect(kVoiceSearchButtonFrame)]); |
512 [_voiceSearchButton | 508 [_voiceSearchButton |
513 setAutoresizingMask:UIViewAutoresizingFlexibleBottomMargin | | 509 setAutoresizingMask:UIViewAutoresizingFlexibleBottomMargin | |
514 UIViewAutoresizingFlexibleLeadingMargin()]; | 510 UIViewAutoresizingFlexibleLeadingMargin()]; |
515 [_webToolbar addSubview:_voiceSearchButton]; | 511 [_webToolbar addSubview:_voiceSearchButton]; |
516 [_webToolbar addSubview:_starButton]; | 512 [_webToolbar addSubview:_starButton]; |
517 [_webToolbar addSubview:_stopButton]; | 513 [_webToolbar addSubview:_stopButton]; |
518 [_webToolbar addSubview:_reloadButton]; | 514 [_webToolbar addSubview:_reloadButton]; |
519 [self setUpButton:_voiceSearchButton | 515 [self setUpButton:_voiceSearchButton |
520 withImageEnum:WebToolbarButtonNameVoice | 516 withImageEnum:WebToolbarButtonNameVoice |
521 forInitialState:UIControlStateNormal | 517 forInitialState:UIControlStateNormal |
(...skipping 26 matching lines...) Expand all Loading... |
548 hasDisabledImage:YES | 544 hasDisabledImage:YES |
549 synchronously:NO]; | 545 synchronously:NO]; |
550 [self setUpButton:_forwardButton | 546 [self setUpButton:_forwardButton |
551 withImageEnum:WebToolbarButtonNameForward | 547 withImageEnum:WebToolbarButtonNameForward |
552 forInitialState:UIControlStateDisabled | 548 forInitialState:UIControlStateDisabled |
553 hasDisabledImage:YES | 549 hasDisabledImage:YES |
554 synchronously:NO]; | 550 synchronously:NO]; |
555 | 551 |
556 _backButtonMode = ToolbarButtonModeNormal; | 552 _backButtonMode = ToolbarButtonModeNormal; |
557 _forwardButtonMode = ToolbarButtonModeNormal; | 553 _forwardButtonMode = ToolbarButtonModeNormal; |
558 UILongPressGestureRecognizer* backLongPress = | 554 base::scoped_nsobject<UILongPressGestureRecognizer> backLongPress( |
559 [[UILongPressGestureRecognizer alloc] | 555 [[UILongPressGestureRecognizer alloc] |
560 initWithTarget:self | 556 initWithTarget:self |
561 action:@selector(handleLongPress:)]; | 557 action:@selector(handleLongPress:)]); |
562 [_backButton addGestureRecognizer:backLongPress]; | 558 [_backButton addGestureRecognizer:backLongPress]; |
563 UILongPressGestureRecognizer* forwardLongPress = | 559 base::scoped_nsobject<UILongPressGestureRecognizer> forwardLongPress( |
564 [[UILongPressGestureRecognizer alloc] | 560 [[UILongPressGestureRecognizer alloc] |
565 initWithTarget:self | 561 initWithTarget:self |
566 action:@selector(handleLongPress:)]; | 562 action:@selector(handleLongPress:)]); |
567 [_forwardButton addGestureRecognizer:forwardLongPress]; | 563 [_forwardButton addGestureRecognizer:forwardLongPress]; |
568 | 564 |
569 // TODO(leng): Consider moving this to a pak file as well. For now, | 565 // TODO(leng): Consider moving this to a pak file as well. For now, |
570 // because it is also used by find_bar_controller_ios, leave it as is. | 566 // because it is also used by find_bar_controller_ios, leave it as is. |
571 NSString* imageName = | 567 NSString* imageName = |
572 _incognito ? @"omnibox_transparent_background" : @"omnibox_background"; | 568 _incognito ? @"omnibox_transparent_background" : @"omnibox_background"; |
573 [_omniboxBackground setImage:StretchableImageNamed(imageName, 12, 12)]; | 569 [_omniboxBackground setImage:StretchableImageNamed(imageName, 12, 12)]; |
574 [_omniBox setAutoresizingMask:UIViewAutoresizingFlexibleWidth | | 570 [_omniBox setAutoresizingMask:UIViewAutoresizingFlexibleWidth | |
575 UIViewAutoresizingFlexibleBottomMargin]; | 571 UIViewAutoresizingFlexibleBottomMargin]; |
576 [_reloadButton addTarget:self | 572 [_reloadButton addTarget:self |
(...skipping 27 matching lines...) Expand all Loading... |
604 UIViewAutoresizingFlexibleBottomMargin]; | 600 UIViewAutoresizingFlexibleBottomMargin]; |
605 [_webToolbar setFrame:[self specificControlsArea]]; | 601 [_webToolbar setFrame:[self specificControlsArea]]; |
606 _locationBar = base::MakeUnique<LocationBarControllerImpl>( | 602 _locationBar = base::MakeUnique<LocationBarControllerImpl>( |
607 _omniBox, _browserState, preloader, self, self); | 603 _omniBox, _browserState, preloader, self, self); |
608 | 604 |
609 // Create the determinate progress bar (phone only). | 605 // Create the determinate progress bar (phone only). |
610 if (idiom == IPHONE_IDIOM) { | 606 if (idiom == IPHONE_IDIOM) { |
611 CGFloat progressWidth = self.view.frame.size.width; | 607 CGFloat progressWidth = self.view.frame.size.width; |
612 CGFloat progressHeight = 0; | 608 CGFloat progressHeight = 0; |
613 progressHeight = kMaterialProgressBarHeight; | 609 progressHeight = kMaterialProgressBarHeight; |
614 _determinateProgressView = [[MDCProgressView alloc] init]; | 610 _determinateProgressView.reset([[MDCProgressView alloc] init]); |
615 _determinateProgressView.hidden = YES; | 611 _determinateProgressView.get().hidden = YES; |
616 [_determinateProgressView | 612 [_determinateProgressView |
617 setProgressTintColor:[MDCPalette cr_bluePalette].tint500]; | 613 setProgressTintColor:[MDCPalette cr_bluePalette].tint500]; |
618 [_determinateProgressView | 614 [_determinateProgressView |
619 setTrackTintColor:[MDCPalette cr_bluePalette].tint100]; | 615 setTrackTintColor:[MDCPalette cr_bluePalette].tint100]; |
620 int progressBarYOffset = | 616 int progressBarYOffset = |
621 floor(progressHeight / 2) + kDeterminateProgressBarYOffset; | 617 floor(progressHeight / 2) + kDeterminateProgressBarYOffset; |
622 int progressBarY = self.view.bounds.size.height - progressBarYOffset; | 618 int progressBarY = self.view.bounds.size.height - progressBarYOffset; |
623 CGRect progressBarFrame = | 619 CGRect progressBarFrame = |
624 CGRectMake(0, progressBarY, progressWidth, progressHeight); | 620 CGRectMake(0, progressBarY, progressWidth, progressHeight); |
625 [_determinateProgressView setFrame:progressBarFrame]; | 621 [_determinateProgressView setFrame:progressBarFrame]; |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
669 - (void)browserStateDestroyed { | 665 - (void)browserStateDestroyed { |
670 // The location bar has a browser state reference, so must be destroyed at | 666 // The location bar has a browser state reference, so must be destroyed at |
671 // this point. | 667 // this point. |
672 _locationBar.reset(); | 668 _locationBar.reset(); |
673 _browserState = nullptr; | 669 _browserState = nullptr; |
674 } | 670 } |
675 | 671 |
676 - (void)dealloc { | 672 - (void)dealloc { |
677 [[NSNotificationCenter defaultCenter] removeObserver:self]; | 673 [[NSNotificationCenter defaultCenter] removeObserver:self]; |
678 [_tabHistoryPopupController setDelegate:nil]; | 674 [_tabHistoryPopupController setDelegate:nil]; |
| 675 [super dealloc]; |
679 } | 676 } |
680 | 677 |
681 #pragma mark - | 678 #pragma mark - |
682 #pragma mark Public methods. | 679 #pragma mark Public methods. |
683 | 680 |
684 - (void)updateToolbarState { | 681 - (void)updateToolbarState { |
685 ToolbarModelIOS* toolbarModelIOS = [self.delegate toolbarModelIOS]; | 682 ToolbarModelIOS* toolbarModelIOS = [self.delegate toolbarModelIOS]; |
686 if (toolbarModelIOS->IsLoading()) { | 683 if (toolbarModelIOS->IsLoading()) { |
687 [self showStopButton]; | 684 [self showStopButton]; |
688 [self startProgressBar]; | 685 [self startProgressBar]; |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
742 [_backButton setHidden:NO]; | 739 [_backButton setHidden:NO]; |
743 [_forwardButton setHidden:NO]; | 740 [_forwardButton setHidden:NO]; |
744 [_omniboxBackground setHidden:NO]; | 741 [_omniboxBackground setHidden:NO]; |
745 [self.backgroundView setAlpha:1]; | 742 [self.backgroundView setAlpha:1]; |
746 [self hideViewsForNewTabPage:NO]; | 743 [self hideViewsForNewTabPage:NO]; |
747 [self updateToolbarState]; | 744 [self updateToolbarState]; |
748 } | 745 } |
749 | 746 |
750 - (void)showPrerenderingAnimation { | 747 - (void)showPrerenderingAnimation { |
751 _prerenderAnimating = YES; | 748 _prerenderAnimating = YES; |
752 __weak MDCProgressView* weakDeterminateProgressView = | |
753 _determinateProgressView; | |
754 [_determinateProgressView setProgress:0]; | 749 [_determinateProgressView setProgress:0]; |
755 [_determinateProgressView setHidden:NO | 750 [_determinateProgressView setHidden:NO |
756 animated:YES | 751 animated:YES |
757 completion:^(BOOL finished) { | 752 completion:^(BOOL finished) { |
758 [weakDeterminateProgressView | 753 [_determinateProgressView |
759 setProgress:1 | 754 setProgress:1 |
760 animated:YES | 755 animated:YES |
761 completion:^(BOOL finished) { | 756 completion:^(BOOL finished) { |
762 [weakDeterminateProgressView setHidden:YES | 757 [_determinateProgressView setHidden:YES |
763 animated:YES | 758 animated:YES |
764 completion:nil]; | 759 completion:nil]; |
765 }]; | 760 }]; |
766 }]; | 761 }]; |
767 } | 762 } |
768 | 763 |
769 - (void)setControlsHidden:(BOOL)hidden { | 764 - (void)setControlsHidden:(BOOL)hidden { |
770 [self setStandardControlsVisible:!hidden]; | 765 [self setStandardControlsVisible:!hidden]; |
771 [_webToolbar setHidden:hidden]; | 766 [_webToolbar setHidden:hidden]; |
772 } | 767 } |
773 | 768 |
774 - (void)setControlsAlpha:(CGFloat)alpha { | 769 - (void)setControlsAlpha:(CGFloat)alpha { |
775 [self setStandardControlsAlpha:alpha]; | 770 [self setStandardControlsAlpha:alpha]; |
776 [_webToolbar setAlpha:alpha]; | 771 [_webToolbar setAlpha:alpha]; |
777 } | 772 } |
778 | 773 |
779 - (void)currentPageLoadStarted { | 774 - (void)currentPageLoadStarted { |
780 [self startProgressBar]; | 775 [self startProgressBar]; |
781 } | 776 } |
782 | 777 |
783 - (void)selectedTabChanged { | 778 - (void)selectedTabChanged { |
784 [self cancelOmniboxEdit]; | 779 [self cancelOmniboxEdit]; |
785 } | 780 } |
786 | 781 |
787 - (CGRect)bookmarkButtonAnchorRect { | 782 - (CGRect)bookmarkButtonAnchorRect { |
788 // Shrink the padding around the bookmark button so the popovers are anchored | 783 // Shrink the padding around the bookmark button so the popovers are anchored |
789 // correctly. | 784 // correctly. |
790 return CGRectInset([_starButton bounds], 6, 11); | 785 return CGRectInset([_starButton bounds], 6, 11); |
791 } | 786 } |
792 | 787 |
793 - (UIView*)bookmarkButtonView { | 788 - (UIView*)bookmarkButtonView { |
794 return _starButton; | 789 return _starButton.get(); |
795 } | 790 } |
796 | 791 |
797 - (CGRect)visibleOmniboxFrame { | 792 - (CGRect)visibleOmniboxFrame { |
798 CGRect frame = _omniboxBackground.frame; | 793 CGRect frame = _omniboxBackground.get().frame; |
799 frame = [self.view.superview convertRect:frame | 794 frame = [self.view.superview convertRect:frame |
800 fromView:[_omniboxBackground superview]]; | 795 fromView:[_omniboxBackground superview]]; |
801 // Account for the omnibox background image transparent sides. | 796 // Account for the omnibox background image transparent sides. |
802 return CGRectInset(frame, -kBackgroundImageVisibleRectOffset, 0); | 797 return CGRectInset(frame, -kBackgroundImageVisibleRectOffset, 0); |
803 } | 798 } |
804 | 799 |
805 - (UIImage*)snapshotWithWidth:(CGFloat)width { | 800 - (UIImage*)snapshotWithWidth:(CGFloat)width { |
806 if (IsIPadIdiom()) | 801 if (IsIPadIdiom()) |
807 return nil; | 802 return nil; |
808 // Below call will be no-op if cached snapshot is valid. | 803 // Below call will be no-op if cached snapshot is valid. |
809 [self updateSnapshotWithWidth:width forced:YES]; | 804 [self updateSnapshotWithWidth:width forced:YES]; |
810 return _snapshot; | 805 return [[_snapshot retain] autorelease]; |
811 } | 806 } |
812 | 807 |
813 - (void)showTabHistoryPopupInView:(UIView*)view | 808 - (void)showTabHistoryPopupInView:(UIView*)view |
814 withItems:(const web::NavigationItemList&)items | 809 withItems:(const web::NavigationItemList&)items |
815 forBackHistory:(BOOL)isBackHistory { | 810 forBackHistory:(BOOL)isBackHistory { |
816 if (_tabHistoryPopupController) | 811 if (_tabHistoryPopupController) |
817 return; | 812 return; |
818 | 813 |
819 base::RecordAction(UserMetricsAction("MobileToolbarShowTabHistoryMenu")); | 814 base::RecordAction(UserMetricsAction("MobileToolbarShowTabHistoryMenu")); |
820 | 815 |
821 UIButton* historyButton = isBackHistory ? _backButton : _forwardButton; | 816 UIButton* historyButton = isBackHistory ? _backButton : _forwardButton; |
822 // Keep the button pressed by swapping the normal and highlighted images. | 817 // Keep the button pressed by swapping the normal and highlighted images. |
823 [self setImagesForNavButton:historyButton withTabHistoryVisible:YES]; | 818 [self setImagesForNavButton:historyButton withTabHistoryVisible:YES]; |
824 | 819 |
825 // Set the origin for the tools popup to the leading side of the bottom of the | 820 // Set the origin for the tools popup to the leading side of the bottom of the |
826 // pressed buttons. | 821 // pressed buttons. |
827 CGRect buttonBounds = [historyButton.imageView bounds]; | 822 CGRect buttonBounds = [historyButton.imageView bounds]; |
828 CGPoint origin = CGPointMake(CGRectGetLeadingEdge(buttonBounds), | 823 CGPoint origin = CGPointMake(CGRectGetLeadingEdge(buttonBounds), |
829 CGRectGetMaxY(buttonBounds)); | 824 CGRectGetMaxY(buttonBounds)); |
830 CGPoint convertedOrigin = | 825 CGPoint convertedOrigin = |
831 [view convertPoint:origin fromView:historyButton.imageView]; | 826 [view convertPoint:origin fromView:historyButton.imageView]; |
832 _tabHistoryPopupController = | 827 _tabHistoryPopupController.reset([[TabHistoryPopupController alloc] |
833 [[TabHistoryPopupController alloc] initWithOrigin:convertedOrigin | 828 initWithOrigin:convertedOrigin |
834 parentView:view | 829 parentView:view |
835 items:items]; | 830 items:items]); |
836 [_tabHistoryPopupController setDelegate:self]; | 831 [_tabHistoryPopupController setDelegate:self]; |
837 | 832 |
838 // Fade in the popup and notify observers. | 833 // Fade in the popup and notify observers. |
839 CGRect containerFrame = [[_tabHistoryPopupController popupContainer] frame]; | 834 CGRect containerFrame = [[_tabHistoryPopupController popupContainer] frame]; |
840 CGPoint destination = CGPointMake(CGRectGetLeadingEdge(containerFrame), | 835 CGPoint destination = CGPointMake(CGRectGetLeadingEdge(containerFrame), |
841 CGRectGetMinY(containerFrame)); | 836 CGRectGetMinY(containerFrame)); |
842 [_tabHistoryPopupController fadeInPopupFromSource:convertedOrigin | 837 [_tabHistoryPopupController fadeInPopupFromSource:convertedOrigin |
843 toDestination:destination]; | 838 toDestination:destination]; |
844 [[NSNotificationCenter defaultCenter] | 839 [[NSNotificationCenter defaultCenter] |
845 postNotificationName:kTabHistoryPopupWillShowNotification | 840 postNotificationName:kTabHistoryPopupWillShowNotification |
846 object:nil]; | 841 object:nil]; |
847 } | 842 } |
848 | 843 |
849 - (void)dismissTabHistoryPopup { | 844 - (void)dismissTabHistoryPopup { |
850 if (!_tabHistoryPopupController) | 845 if (!_tabHistoryPopupController) |
851 return; | 846 return; |
852 TabHistoryPopupController* tempTHPC = _tabHistoryPopupController; | 847 TabHistoryPopupController* tempTHPC = _tabHistoryPopupController.get(); |
853 [tempTHPC containerView].userInteractionEnabled = NO; | 848 [tempTHPC containerView].userInteractionEnabled = NO; |
854 [tempTHPC dismissAnimatedWithCompletion:^{ | 849 [tempTHPC dismissAnimatedWithCompletion:^{ |
855 // Unpress the back/forward button by restoring the normal and | 850 // Unpress the back/forward button by restoring the normal and |
856 // highlighted images to their usual state. | 851 // highlighted images to their usual state. |
857 [self setImagesForNavButton:_backButton withTabHistoryVisible:NO]; | 852 [self setImagesForNavButton:_backButton withTabHistoryVisible:NO]; |
858 [self setImagesForNavButton:_forwardButton withTabHistoryVisible:NO]; | 853 [self setImagesForNavButton:_forwardButton withTabHistoryVisible:NO]; |
859 // Reference tempTHPC so the block retains it. | 854 // Reference tempTHPC so the block retains it. |
860 [tempTHPC self]; | 855 [tempTHPC self]; |
861 }]; | 856 }]; |
862 // reset _tabHistoryPopupController to prevent -applicationDidEnterBackground | 857 // reset _tabHistoryPopupController to prevent -applicationDidEnterBackground |
863 // from posting another kTabHistoryPopupWillHideNotification. | 858 // from posting another kTabHistoryPopupWillHideNotification. |
864 _tabHistoryPopupController = nil; | 859 _tabHistoryPopupController.reset(); |
865 | 860 |
866 [[NSNotificationCenter defaultCenter] | 861 [[NSNotificationCenter defaultCenter] |
867 postNotificationName:kTabHistoryPopupWillHideNotification | 862 postNotificationName:kTabHistoryPopupWillHideNotification |
868 object:nil]; | 863 object:nil]; |
869 } | 864 } |
870 | 865 |
871 - (BOOL)isOmniboxFirstResponder { | 866 - (BOOL)isOmniboxFirstResponder { |
872 return [_omniBox isFirstResponder]; | 867 return [_omniBox isFirstResponder]; |
873 } | 868 } |
874 | 869 |
875 - (BOOL)showingOmniboxPopup { | 870 - (BOOL)showingOmniboxPopup { |
876 OmniboxViewIOS* omniboxViewIOS = | 871 OmniboxViewIOS* omniboxViewIOS = |
877 static_cast<OmniboxViewIOS*>(_locationBar.get()->GetLocationEntry()); | 872 static_cast<OmniboxViewIOS*>(_locationBar.get()->GetLocationEntry()); |
878 return omniboxViewIOS->IsPopupOpen(); | 873 return omniboxViewIOS->IsPopupOpen(); |
879 } | 874 } |
880 | 875 |
881 - (void)traitCollectionDidChange:(UITraitCollection*)previousTraitCollection { | 876 - (void)traitCollectionDidChange:(UITraitCollection*)previousTraitCollection { |
882 [super traitCollectionDidChange:previousTraitCollection]; | 877 [super traitCollectionDidChange:previousTraitCollection]; |
883 _lastKnownTraitCollection = [UITraitCollection | 878 _lastKnownTraitCollection.reset([[UITraitCollection |
884 traitCollectionWithTraitsFromCollections:@[ self.view.traitCollection ]]; | 879 traitCollectionWithTraitsFromCollections:@[ self.view.traitCollection ]] |
| 880 retain]); |
885 if (IsIPadIdiom()) { | 881 if (IsIPadIdiom()) { |
886 // Update toolbar accessory views. | 882 // Update toolbar accessory views. |
887 BOOL isCompactTabletView = IsCompactTablet(self.view); | 883 BOOL isCompactTabletView = IsCompactTablet(self.view); |
888 [_voiceSearchButton setHidden:isCompactTabletView]; | 884 [_voiceSearchButton setHidden:isCompactTabletView]; |
889 [_starButton setHidden:isCompactTabletView]; | 885 [_starButton setHidden:isCompactTabletView]; |
890 [_reloadButton setHidden:isCompactTabletView]; | 886 [_reloadButton setHidden:isCompactTabletView]; |
891 [_stopButton setHidden:isCompactTabletView]; | 887 [_stopButton setHidden:isCompactTabletView]; |
892 [self updateToolbarState]; | 888 [self updateToolbarState]; |
893 | 889 |
894 // Update keyboard accessory views. | 890 // Update keyboard accessory views. |
895 BOOL hidden = [_keyboardVoiceSearchButton isHidden]; | 891 BOOL hidden = [_keyboardVoiceSearchButton isHidden]; |
896 _keyBoardAccessoryView = nil; | 892 _keyBoardAccessoryView.reset(); |
897 [_omniBox setInputAccessoryView:[self keyboardAccessoryView]]; | 893 [_omniBox setInputAccessoryView:[self keyboardAccessoryView]]; |
898 [_keyboardVoiceSearchButton setHidden:hidden]; | 894 [_keyboardVoiceSearchButton setHidden:hidden]; |
899 if ([_omniBox isFirstResponder]) { | 895 if ([_omniBox isFirstResponder]) { |
900 [_omniBox reloadInputViews]; | 896 [_omniBox reloadInputViews]; |
901 } | 897 } |
902 | 898 |
903 // Re-layout toolbar and omnibox. | 899 // Re-layout toolbar and omnibox. |
904 [_webToolbar setFrame:[self specificControlsArea]]; | 900 [_webToolbar setFrame:[self specificControlsArea]]; |
905 [self layoutOmnibox]; | 901 [self layoutOmnibox]; |
906 } | 902 } |
907 } | 903 } |
908 | 904 |
909 #pragma mark - | 905 #pragma mark - |
910 #pragma mark Overridden superclass methods. | 906 #pragma mark Overridden superclass methods. |
911 | 907 |
912 - (void)applicationDidEnterBackground:(NSNotification*)notify { | 908 - (void)applicationDidEnterBackground:(NSNotification*)notify { |
913 if (_tabHistoryPopupController) { | 909 if (_tabHistoryPopupController) { |
914 // Dismiss the tab history popup without animation. | 910 // Dismiss the tab history popup without animation. |
915 [self setImagesForNavButton:_backButton withTabHistoryVisible:NO]; | 911 [self setImagesForNavButton:_backButton withTabHistoryVisible:NO]; |
916 [self setImagesForNavButton:_forwardButton withTabHistoryVisible:NO]; | 912 [self setImagesForNavButton:_forwardButton withTabHistoryVisible:NO]; |
917 _tabHistoryPopupController = nil; | 913 _tabHistoryPopupController.reset(nil); |
918 [[NSNotificationCenter defaultCenter] | 914 [[NSNotificationCenter defaultCenter] |
919 postNotificationName:kTabHistoryPopupWillHideNotification | 915 postNotificationName:kTabHistoryPopupWillHideNotification |
920 object:nil]; | 916 object:nil]; |
921 } | 917 } |
922 [super applicationDidEnterBackground:notify]; | 918 [super applicationDidEnterBackground:notify]; |
923 } | 919 } |
924 | 920 |
925 - (void)setUpButton:(UIButton*)button | 921 - (void)setUpButton:(UIButton*)button |
926 withImageEnum:(int)imageEnum | 922 withImageEnum:(int)imageEnum |
927 forInitialState:(UIControlState)initialState | 923 forInitialState:(UIControlState)initialState |
928 hasDisabledImage:(BOOL)hasDisabledImage | 924 hasDisabledImage:(BOOL)hasDisabledImage |
929 synchronously:(BOOL)synchronously { | 925 synchronously:(BOOL)synchronously { |
930 [super setUpButton:button | 926 [super setUpButton:button |
931 withImageEnum:imageEnum | 927 withImageEnum:imageEnum |
932 forInitialState:initialState | 928 forInitialState:initialState |
933 hasDisabledImage:hasDisabledImage | 929 hasDisabledImage:hasDisabledImage |
934 synchronously:synchronously]; | 930 synchronously:synchronously]; |
935 | 931 |
936 if (button != _starButton) | 932 if (button != _starButton.get()) |
937 return; | 933 return; |
938 // The star button behaves slightly differently. It uses the pressed | 934 // The star button behaves slightly differently. It uses the pressed |
939 // image for its selected state as well as its pressed state. | 935 // image for its selected state as well as its pressed state. |
940 void (^starBlock)(void) = ^{ | 936 void (^starBlock)(void) = ^{ |
941 UIImage* starImage = [self imageForImageEnum:WebToolbarButtonNameStar | 937 UIImage* starImage = [self imageForImageEnum:WebToolbarButtonNameStar |
942 forState:ToolbarButtonUIStatePressed]; | 938 forState:ToolbarButtonUIStatePressed]; |
943 [_starButton setAdjustsImageWhenHighlighted:NO]; | 939 [_starButton setAdjustsImageWhenHighlighted:NO]; |
944 [_starButton setImage:starImage forState:UIControlStateSelected]; | 940 [_starButton setImage:starImage forState:UIControlStateSelected]; |
945 }; | 941 }; |
946 if (synchronously) { | 942 if (synchronously) { |
947 starBlock(); | 943 starBlock(); |
948 } else { | 944 } else { |
949 dispatch_time_t addImageDelay = | 945 dispatch_time_t addImageDelay = |
950 dispatch_time(DISPATCH_TIME_NOW, kNonInitialImageAdditionDelayNanosec); | 946 dispatch_time(DISPATCH_TIME_NOW, kNonInitialImageAdditionDelayNanosec); |
951 dispatch_after(addImageDelay, dispatch_get_main_queue(), starBlock); | 947 dispatch_after(addImageDelay, dispatch_get_main_queue(), starBlock); |
952 } | 948 } |
953 } | 949 } |
954 | 950 |
955 - (void)standardButtonPressed:(UIButton*)sender { | 951 - (void)standardButtonPressed:(UIButton*)sender { |
956 [super standardButtonPressed:sender]; | 952 [super standardButtonPressed:sender]; |
957 [self cancelOmniboxEdit]; | 953 [self cancelOmniboxEdit]; |
958 } | 954 } |
959 | 955 |
960 - (IBAction)recordUserMetrics:(id)sender { | 956 - (IBAction)recordUserMetrics:(id)sender { |
961 if (sender == _backButton) { | 957 if (sender == _backButton.get()) { |
962 base::RecordAction(UserMetricsAction("MobileToolbarBack")); | 958 base::RecordAction(UserMetricsAction("MobileToolbarBack")); |
963 } else if (sender == _forwardButton) { | 959 } else if (sender == _forwardButton.get()) { |
964 base::RecordAction(UserMetricsAction("MobileToolbarForward")); | 960 base::RecordAction(UserMetricsAction("MobileToolbarForward")); |
965 } else if (sender == _reloadButton) { | 961 } else if (sender == _reloadButton.get()) { |
966 base::RecordAction(UserMetricsAction("MobileToolbarReload")); | 962 base::RecordAction(UserMetricsAction("MobileToolbarReload")); |
967 } else if (sender == _stopButton) { | 963 } else if (sender == _stopButton.get()) { |
968 base::RecordAction(UserMetricsAction("MobileToolbarStop")); | 964 base::RecordAction(UserMetricsAction("MobileToolbarStop")); |
969 } else if (sender == _voiceSearchButton) { | 965 } else if (sender == _voiceSearchButton.get()) { |
970 base::RecordAction(UserMetricsAction("MobileToolbarVoiceSearch")); | 966 base::RecordAction(UserMetricsAction("MobileToolbarVoiceSearch")); |
971 } else if (sender == _keyboardVoiceSearchButton) { | 967 } else if (sender == _keyboardVoiceSearchButton.get()) { |
972 base::RecordAction(UserMetricsAction("MobileCustomRowVoiceSearch")); | 968 base::RecordAction(UserMetricsAction("MobileCustomRowVoiceSearch")); |
973 } else if (sender == _starButton) { | 969 } else if (sender == _starButton.get()) { |
974 base::RecordAction(UserMetricsAction("MobileToolbarToggleBookmark")); | 970 base::RecordAction(UserMetricsAction("MobileToolbarToggleBookmark")); |
975 } else { | 971 } else { |
976 [super recordUserMetrics:sender]; | 972 [super recordUserMetrics:sender]; |
977 } | 973 } |
978 } | 974 } |
979 | 975 |
980 - (IBAction)stackButtonTouchDown:(id)sender { | 976 - (IBAction)stackButtonTouchDown:(id)sender { |
981 [self.delegate prepareToEnterTabSwitcher:self]; | 977 [self.delegate prepareToEnterTabSwitcher:self]; |
982 } | 978 } |
983 | 979 |
984 - (BOOL)imageShouldFlipForRightToLeftLayoutDirection:(int)imageEnum { | 980 - (BOOL)imageShouldFlipForRightToLeftLayoutDirection:(int)imageEnum { |
985 DCHECK(imageEnum < NumberOfWebToolbarButtonNames); | 981 DCHECK(imageEnum < NumberOfWebToolbarButtonNames); |
986 if (imageEnum < NumberOfToolbarButtonNames) | 982 if (imageEnum < NumberOfToolbarButtonNames) |
987 return [super imageShouldFlipForRightToLeftLayoutDirection:imageEnum]; | 983 return [super imageShouldFlipForRightToLeftLayoutDirection:imageEnum]; |
988 if (imageEnum == WebToolbarButtonNameBack || | 984 if (imageEnum == WebToolbarButtonNameBack || |
989 imageEnum == WebToolbarButtonNameForward || | 985 imageEnum == WebToolbarButtonNameForward || |
990 imageEnum == WebToolbarButtonNameReload || | 986 imageEnum == WebToolbarButtonNameReload || |
991 imageEnum == WebToolbarButtonNameCallingApp) { | 987 imageEnum == WebToolbarButtonNameCallingApp) { |
992 return YES; | 988 return YES; |
993 } | 989 } |
994 return NO; | 990 return NO; |
995 } | 991 } |
996 | 992 |
997 - (int)imageEnumForButton:(UIButton*)button { | 993 - (int)imageEnumForButton:(UIButton*)button { |
998 if (button == _voiceSearchButton) | 994 if (button == _voiceSearchButton.get()) |
999 return _isTTSPlaying ? WebToolbarButtonNameTTS : WebToolbarButtonNameVoice; | 995 return _isTTSPlaying ? WebToolbarButtonNameTTS : WebToolbarButtonNameVoice; |
1000 if (button == _starButton) | 996 if (button == _starButton.get()) |
1001 return WebToolbarButtonNameStar; | 997 return WebToolbarButtonNameStar; |
1002 if (button == _stopButton) | 998 if (button == _stopButton.get()) |
1003 return WebToolbarButtonNameStop; | 999 return WebToolbarButtonNameStop; |
1004 if (button == _reloadButton) | 1000 if (button == _reloadButton.get()) |
1005 return WebToolbarButtonNameReload; | 1001 return WebToolbarButtonNameReload; |
1006 if (button == _backButton) | 1002 if (button == _backButton.get()) |
1007 return WebToolbarButtonNameBack; | 1003 return WebToolbarButtonNameBack; |
1008 if (button == _forwardButton) | 1004 if (button == _forwardButton.get()) |
1009 return WebToolbarButtonNameForward; | 1005 return WebToolbarButtonNameForward; |
1010 return [super imageEnumForButton:button]; | 1006 return [super imageEnumForButton:button]; |
1011 } | 1007 } |
1012 | 1008 |
1013 - (int)imageIdForImageEnum:(int)index | 1009 - (int)imageIdForImageEnum:(int)index |
1014 style:(ToolbarControllerStyle)style | 1010 style:(ToolbarControllerStyle)style |
1015 forState:(ToolbarButtonUIState)state { | 1011 forState:(ToolbarButtonUIState)state { |
1016 DCHECK(style < ToolbarControllerStyleMaxStyles); | 1012 DCHECK(style < ToolbarControllerStyleMaxStyles); |
1017 DCHECK(state < NumberOfToolbarButtonUIStates); | 1013 DCHECK(state < NumberOfToolbarButtonUIStates); |
1018 // Additional checking. These three buttons should only ever be used on iPad. | 1014 // Additional checking. These three buttons should only ever be used on iPad. |
(...skipping 288 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1307 } | 1303 } |
1308 | 1304 |
1309 - (void)locationBarBeganEdit { | 1305 - (void)locationBarBeganEdit { |
1310 [self.delegate locationBarBeganEdit:self]; | 1306 [self.delegate locationBarBeganEdit:self]; |
1311 } | 1307 } |
1312 | 1308 |
1313 - (void)locationBarChanged { | 1309 - (void)locationBarChanged { |
1314 // Hide the voice search button once the user starts editing the omnibox but | 1310 // Hide the voice search button once the user starts editing the omnibox but |
1315 // show it if the omnibox is empty. | 1311 // show it if the omnibox is empty. |
1316 bool isEditingOrEmpty = _locationBar->GetLocationEntry()->IsEditingOrEmpty(); | 1312 bool isEditingOrEmpty = _locationBar->GetLocationEntry()->IsEditingOrEmpty(); |
1317 BOOL editingAndNotEmpty = isEditingOrEmpty && _omniBox.text.length != 0; | 1313 BOOL editingAndNotEmpty = isEditingOrEmpty && _omniBox.get().text.length != 0; |
1318 // If the voice search button is visible but about to be hidden (i.e. | 1314 // If the voice search button is visible but about to be hidden (i.e. |
1319 // the omnibox is no longer empty) then this is the first omnibox text so | 1315 // the omnibox is no longer empty) then this is the first omnibox text so |
1320 // record a user action. | 1316 // record a user action. |
1321 if (![_keyboardVoiceSearchButton isHidden] && editingAndNotEmpty) { | 1317 if (![_keyboardVoiceSearchButton isHidden] && editingAndNotEmpty) { |
1322 base::RecordAction(UserMetricsAction("MobileFirstTextInOmnibox")); | 1318 base::RecordAction(UserMetricsAction("MobileFirstTextInOmnibox")); |
1323 } | 1319 } |
1324 [_keyboardVoiceSearchButton setHidden:editingAndNotEmpty]; | 1320 [_keyboardVoiceSearchButton setHidden:editingAndNotEmpty]; |
1325 } | 1321 } |
1326 | 1322 |
1327 - (web::WebState*)getWebState { | 1323 - (web::WebState*)getWebState { |
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1471 _omniBox); | 1467 _omniBox); |
1472 } | 1468 } |
1473 } | 1469 } |
1474 | 1470 |
1475 #pragma mark - | 1471 #pragma mark - |
1476 #pragma mark Private methods. | 1472 #pragma mark Private methods. |
1477 | 1473 |
1478 - (UIButton*)cancelButton { | 1474 - (UIButton*)cancelButton { |
1479 if (_cancelButton) | 1475 if (_cancelButton) |
1480 return _cancelButton; | 1476 return _cancelButton; |
1481 _cancelButton = [UIButton buttonWithType:UIButtonTypeCustom]; | 1477 _cancelButton.reset([[UIButton buttonWithType:UIButtonTypeCustom] retain]); |
1482 NSString* collapseName = _incognito ? @"collapse_incognito" : @"collapse"; | 1478 NSString* collapseName = _incognito ? @"collapse_incognito" : @"collapse"; |
1483 [_cancelButton setImage:[UIImage imageNamed:collapseName] | 1479 [_cancelButton setImage:[UIImage imageNamed:collapseName] |
1484 forState:UIControlStateNormal]; | 1480 forState:UIControlStateNormal]; |
1485 NSString* collapsePressedName = | 1481 NSString* collapsePressedName = |
1486 _incognito ? @"collapse_pressed_incognito" : @"collapse_pressed"; | 1482 _incognito ? @"collapse_pressed_incognito" : @"collapse_pressed"; |
1487 [_cancelButton setImage:[UIImage imageNamed:collapsePressedName] | 1483 [_cancelButton setImage:[UIImage imageNamed:collapsePressedName] |
1488 forState:UIControlStateHighlighted]; | 1484 forState:UIControlStateHighlighted]; |
1489 [_cancelButton setAccessibilityLabel:l10n_util::GetNSString(IDS_CANCEL)]; | 1485 [_cancelButton setAccessibilityLabel:l10n_util::GetNSString(IDS_CANCEL)]; |
1490 [_cancelButton setAutoresizingMask:UIViewAutoresizingFlexibleLeadingMargin() | | 1486 [_cancelButton setAutoresizingMask:UIViewAutoresizingFlexibleLeadingMargin() | |
1491 UIViewAutoresizingFlexibleHeight]; | 1487 UIViewAutoresizingFlexibleHeight]; |
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1627 [_determinateProgressView setHidden:NO animated:YES completion:nil]; | 1623 [_determinateProgressView setHidden:NO animated:YES completion:nil]; |
1628 } | 1624 } |
1629 } | 1625 } |
1630 | 1626 |
1631 - (void)stopProgressBar { | 1627 - (void)stopProgressBar { |
1632 if (_determinateProgressView && ![_determinateProgressView isHidden]) { | 1628 if (_determinateProgressView && ![_determinateProgressView isHidden]) { |
1633 // Update the toolbar snapshot, but only after the progress bar has | 1629 // Update the toolbar snapshot, but only after the progress bar has |
1634 // disappeared. | 1630 // disappeared. |
1635 | 1631 |
1636 if (!_prerenderAnimating) { | 1632 if (!_prerenderAnimating) { |
1637 __weak MDCProgressView* weakDeterminateProgressView = | |
1638 _determinateProgressView; | |
1639 // Calling -completeAndHide while a prerender animation is in progress | 1633 // Calling -completeAndHide while a prerender animation is in progress |
1640 // will result in hiding the progress bar before the animation is | 1634 // will result in hiding the progress bar before the animation is |
1641 // complete. | 1635 // complete. |
1642 [_determinateProgressView setProgress:1 | 1636 [_determinateProgressView setProgress:1 |
1643 animated:YES | 1637 animated:YES |
1644 completion:^(BOOL finished) { | 1638 completion:^(BOOL finished) { |
1645 [weakDeterminateProgressView setHidden:YES | 1639 [_determinateProgressView setHidden:YES |
1646 animated:YES | 1640 animated:YES |
1647 completion:nil]; | 1641 completion:nil]; |
1648 }]; | 1642 }]; |
1649 } | 1643 } |
1650 CGFloat delay = _unitTesting ? 0 : kLoadCompleteHideProgressBarDelay; | 1644 CGFloat delay = _unitTesting ? 0 : kLoadCompleteHideProgressBarDelay; |
1651 [self performSelector:@selector(hideProgressBarAndTakeSnapshot) | 1645 [self performSelector:@selector(hideProgressBarAndTakeSnapshot) |
1652 withObject:nil | 1646 withObject:nil |
1653 afterDelay:delay]; | 1647 afterDelay:delay]; |
1654 } | 1648 } |
1655 } | 1649 } |
1656 | 1650 |
1657 - (void)hideProgressBarAndTakeSnapshot { | 1651 - (void)hideProgressBarAndTakeSnapshot { |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1702 // Size changes matter. | 1696 // Size changes matter. |
1703 hash ^= static_cast<uint32_t>(width) << 15; | 1697 hash ^= static_cast<uint32_t>(width) << 15; |
1704 hash ^= static_cast<uint32_t>([self view].frame.size.height) << 23; | 1698 hash ^= static_cast<uint32_t>([self view].frame.size.height) << 23; |
1705 return hash; | 1699 return hash; |
1706 } | 1700 } |
1707 | 1701 |
1708 - (void)handleLongPress:(UILongPressGestureRecognizer*)gesture { | 1702 - (void)handleLongPress:(UILongPressGestureRecognizer*)gesture { |
1709 if (gesture.state != UIGestureRecognizerStateBegan) | 1703 if (gesture.state != UIGestureRecognizerStateBegan) |
1710 return; | 1704 return; |
1711 | 1705 |
1712 if (gesture.view == _backButton) { | 1706 if (gesture.view == _backButton.get()) { |
1713 GenericChromeCommand* command = | 1707 base::scoped_nsobject<GenericChromeCommand> command( |
1714 [[GenericChromeCommand alloc] initWithTag:IDC_SHOW_BACK_HISTORY]; | 1708 [[GenericChromeCommand alloc] initWithTag:IDC_SHOW_BACK_HISTORY]); |
1715 [_backButton chromeExecuteCommand:command]; | 1709 [_backButton chromeExecuteCommand:command]; |
1716 } else if (gesture.view == _forwardButton) { | 1710 } else if (gesture.view == _forwardButton.get()) { |
1717 GenericChromeCommand* command = | 1711 base::scoped_nsobject<GenericChromeCommand> command( |
1718 [[GenericChromeCommand alloc] initWithTag:IDC_SHOW_FORWARD_HISTORY]; | 1712 [[GenericChromeCommand alloc] initWithTag:IDC_SHOW_FORWARD_HISTORY]); |
1719 [_forwardButton chromeExecuteCommand:command]; | 1713 [_forwardButton chromeExecuteCommand:command]; |
1720 } | 1714 } |
1721 } | 1715 } |
1722 | 1716 |
1723 - (void)setImagesForNavButton:(UIButton*)button | 1717 - (void)setImagesForNavButton:(UIButton*)button |
1724 withTabHistoryVisible:(BOOL)tabHistoryVisible { | 1718 withTabHistoryVisible:(BOOL)tabHistoryVisible { |
1725 BOOL isBackButton = button == _backButton; | 1719 BOOL isBackButton = button == _backButton; |
1726 ToolbarButtonMode newMode = | 1720 ToolbarButtonMode newMode = |
1727 tabHistoryVisible ? ToolbarButtonModeReversed : ToolbarButtonModeNormal; | 1721 tabHistoryVisible ? ToolbarButtonModeReversed : ToolbarButtonModeNormal; |
1728 if (isBackButton && newMode == _backButtonMode) | 1722 if (isBackButton && newMode == _backButtonMode) |
1729 return; | 1723 return; |
1730 if (!isBackButton && newMode == _forwardButtonMode) | 1724 if (!isBackButton && newMode == _forwardButtonMode) |
1731 return; | 1725 return; |
1732 | 1726 |
1733 UIImage* normalImage = [button imageForState:UIControlStateNormal]; | 1727 base::scoped_nsobject<UIImage> normalImage( |
1734 UIImage* highlightedImage = [button imageForState:UIControlStateHighlighted]; | 1728 [[button imageForState:UIControlStateNormal] retain]); |
| 1729 base::scoped_nsobject<UIImage> highlightedImage( |
| 1730 [[button imageForState:UIControlStateHighlighted] retain]); |
1735 [button setImage:highlightedImage forState:UIControlStateNormal]; | 1731 [button setImage:highlightedImage forState:UIControlStateNormal]; |
1736 [button setImage:normalImage forState:UIControlStateHighlighted]; | 1732 [button setImage:normalImage forState:UIControlStateHighlighted]; |
1737 if (isBackButton) | 1733 if (isBackButton) |
1738 _backButtonMode = newMode; | 1734 _backButtonMode = newMode; |
1739 else | 1735 else |
1740 _forwardButtonMode = newMode; | 1736 _forwardButtonMode = newMode; |
1741 } | 1737 } |
1742 | 1738 |
1743 - (void)audioReadyForPlayback:(NSNotification*)notification { | 1739 - (void)audioReadyForPlayback:(NSNotification*)notification { |
1744 if (![_voiceSearchButton isHidden]) { | 1740 if (![_voiceSearchButton isHidden]) { |
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1867 if (_keyBoardAccessoryView) | 1863 if (_keyBoardAccessoryView) |
1868 return _keyBoardAccessoryView; | 1864 return _keyBoardAccessoryView; |
1869 | 1865 |
1870 const BOOL isTablet = IsIPadIdiom() && !IsCompactTablet(self.view); | 1866 const BOOL isTablet = IsIPadIdiom() && !IsCompactTablet(self.view); |
1871 | 1867 |
1872 // TODO(pinkerton): purge this view when low memory. | 1868 // TODO(pinkerton): purge this view when low memory. |
1873 CGFloat width = [[UIScreen mainScreen] bounds].size.width; | 1869 CGFloat width = [[UIScreen mainScreen] bounds].size.width; |
1874 CGFloat height = isTablet ? kViewHeightTablet : kViewHeightPhone; | 1870 CGFloat height = isTablet ? kViewHeightTablet : kViewHeightPhone; |
1875 CGRect frame = CGRectMake(0.0, 0.0, width, height); | 1871 CGRect frame = CGRectMake(0.0, 0.0, width, height); |
1876 | 1872 |
1877 _keyBoardAccessoryView = | 1873 _keyBoardAccessoryView.reset([[KeyboardAccessoryView alloc] |
1878 [[KeyboardAccessoryView alloc] initWithFrame:frame | 1874 initWithFrame:frame |
1879 inputViewStyle:UIInputViewStyleKeyboard]; | 1875 inputViewStyle:UIInputViewStyleKeyboard]); |
1880 [_keyBoardAccessoryView setAutoresizingMask:UIViewAutoresizingFlexibleWidth]; | 1876 [_keyBoardAccessoryView setAutoresizingMask:UIViewAutoresizingFlexibleWidth]; |
1881 | 1877 |
1882 NSArray* buttonTitles = | 1878 NSArray* buttonTitles = |
1883 [NSArray arrayWithObjects:@":", @".", @"-", @"/", kDotComTLD, nil]; | 1879 [NSArray arrayWithObjects:@":", @".", @"-", @"/", kDotComTLD, nil]; |
1884 | 1880 |
1885 // Center buttons in available space by placing them within a parent view | 1881 // Center buttons in available space by placing them within a parent view |
1886 // that auto-centers. | 1882 // that auto-centers. |
1887 CGFloat betweenButtonSpacing = | 1883 CGFloat betweenButtonSpacing = |
1888 isTablet ? kBetweenButtonSpacing : kBetweenButtonSpacingPhone; | 1884 isTablet ? kBetweenButtonSpacing : kBetweenButtonSpacingPhone; |
1889 const CGFloat buttonWidth = isTablet ? kButtonSizeXTablet : kButtonSizeXPhone; | 1885 const CGFloat buttonWidth = isTablet ? kButtonSizeXTablet : kButtonSizeXPhone; |
1890 | 1886 |
1891 CGFloat totalWidth = (buttonTitles.count * buttonWidth) + | 1887 CGFloat totalWidth = (buttonTitles.count * buttonWidth) + |
1892 ((buttonTitles.count - 1) * betweenButtonSpacing); | 1888 ((buttonTitles.count - 1) * betweenButtonSpacing); |
1893 CGFloat indent = floor((width - totalWidth) / 2.0); | 1889 CGFloat indent = floor((width - totalWidth) / 2.0); |
1894 if (indent < kButtonInset) | 1890 if (indent < kButtonInset) |
1895 indent = kButtonInset; | 1891 indent = kButtonInset; |
1896 CGRect parentViewRect = CGRectMake(indent, 0.0, totalWidth, height); | 1892 CGRect parentViewRect = CGRectMake(indent, 0.0, totalWidth, height); |
1897 UIView* parentView = [[UIView alloc] initWithFrame:parentViewRect]; | 1893 base::scoped_nsobject<UIView> parentView( |
| 1894 [[UIView alloc] initWithFrame:parentViewRect]); |
1898 [parentView setAutoresizingMask:UIViewAutoresizingFlexibleLeftMargin | | 1895 [parentView setAutoresizingMask:UIViewAutoresizingFlexibleLeftMargin | |
1899 UIViewAutoresizingFlexibleRightMargin]; | 1896 UIViewAutoresizingFlexibleRightMargin]; |
1900 [_keyBoardAccessoryView addSubview:parentView]; | 1897 [_keyBoardAccessoryView addSubview:parentView]; |
1901 | 1898 |
1902 // Create the buttons, starting at the left edge of |parentView|. | 1899 // Create the buttons, starting at the left edge of |parentView|. |
1903 CGRect currentFrame = | 1900 CGRect currentFrame = |
1904 CGRectMake(0.0, kButtonInset, buttonWidth, | 1901 CGRectMake(0.0, kButtonInset, buttonWidth, |
1905 isTablet ? kButtonSizeYTablet : kButtonSizeYPhone); | 1902 isTablet ? kButtonSizeYTablet : kButtonSizeYPhone); |
1906 | 1903 |
1907 for (NSString* title in buttonTitles) { | 1904 for (NSString* title in buttonTitles) { |
1908 UIView* button = [self keyboardButtonWithTitle:title frame:currentFrame]; | 1905 UIView* button = [self keyboardButtonWithTitle:title frame:currentFrame]; |
1909 [parentView addSubview:button]; | 1906 [parentView addSubview:button]; |
1910 currentFrame.origin.x = CGRectGetMaxX(currentFrame) + betweenButtonSpacing; | 1907 currentFrame.origin.x = CGRectGetMaxX(currentFrame) + betweenButtonSpacing; |
1911 } | 1908 } |
1912 | 1909 |
1913 // Create the voice search button and add it to _keyBoardAccessoryView over | 1910 // Create the voice search button and add it to _keyBoardAccessoryView over |
1914 // the text buttons. | 1911 // the text buttons. |
1915 _keyboardVoiceSearchButton = [UIButton buttonWithType:UIButtonTypeCustom]; | 1912 _keyboardVoiceSearchButton.reset( |
| 1913 [[UIButton buttonWithType:UIButtonTypeCustom] retain]); |
1916 [_keyboardVoiceSearchButton | 1914 [_keyboardVoiceSearchButton |
1917 setAutoresizingMask:UIViewAutoresizingFlexibleWidth]; | 1915 setAutoresizingMask:UIViewAutoresizingFlexibleWidth]; |
1918 [_keyboardVoiceSearchButton setTag:IDC_VOICE_SEARCH]; | 1916 [_keyboardVoiceSearchButton setTag:IDC_VOICE_SEARCH]; |
1919 SetA11yLabelAndUiAutomationName(_keyboardVoiceSearchButton, | 1917 SetA11yLabelAndUiAutomationName(_keyboardVoiceSearchButton, |
1920 IDS_IOS_ACCNAME_VOICE_SEARCH, | 1918 IDS_IOS_ACCNAME_VOICE_SEARCH, |
1921 @"Voice Search"); | 1919 @"Voice Search"); |
1922 // TODO(leng): Consider moving these icons into a pak file. | 1920 // TODO(leng): Consider moving these icons into a pak file. |
1923 UIImage* voiceRow = [UIImage imageNamed:@"custom_row_voice"]; | 1921 UIImage* voiceRow = [UIImage imageNamed:@"custom_row_voice"]; |
1924 UIImage* voiceRowPressed = [UIImage imageNamed:@"custom_row_voice_pressed"]; | 1922 UIImage* voiceRowPressed = [UIImage imageNamed:@"custom_row_voice_pressed"]; |
1925 [_keyboardVoiceSearchButton setBackgroundImage:voiceRow | 1923 [_keyboardVoiceSearchButton setBackgroundImage:voiceRow |
(...skipping 21 matching lines...) Expand all Loading... |
1947 forControlEvents:UIControlEventTouchDown]; | 1945 forControlEvents:UIControlEventTouchDown]; |
1948 } else { | 1946 } else { |
1949 [_keyboardVoiceSearchButton addTarget:self | 1947 [_keyboardVoiceSearchButton addTarget:self |
1950 action:@selector(ignoreVoiceSearch:) | 1948 action:@selector(ignoreVoiceSearch:) |
1951 forControlEvents:UIControlEventTouchUpInside]; | 1949 forControlEvents:UIControlEventTouchUpInside]; |
1952 } | 1950 } |
1953 | 1951 |
1954 [_keyBoardAccessoryView addSubview:_keyboardVoiceSearchButton]; | 1952 [_keyBoardAccessoryView addSubview:_keyboardVoiceSearchButton]; |
1955 | 1953 |
1956 // Reset the external keyboard watcher. | 1954 // Reset the external keyboard watcher. |
1957 _hardwareKeyboardWatcher = [[HardwareKeyboardWatcher alloc] | 1955 _hardwareKeyboardWatcher.reset([[HardwareKeyboardWatcher alloc] |
1958 initWithAccessoryView:_keyBoardAccessoryView]; | 1956 initWithAccessoryView:_keyBoardAccessoryView]); |
1959 | 1957 |
1960 return _keyBoardAccessoryView; | 1958 return _keyBoardAccessoryView; |
1961 } | 1959 } |
1962 | 1960 |
1963 - (void)preloadVoiceSearch:(id)sender { | 1961 - (void)preloadVoiceSearch:(id)sender { |
1964 DCHECK(ios::GetChromeBrowserProvider() | 1962 DCHECK(ios::GetChromeBrowserProvider() |
1965 ->GetVoiceSearchProvider() | 1963 ->GetVoiceSearchProvider() |
1966 ->IsVoiceSearchEnabled()); | 1964 ->IsVoiceSearchEnabled()); |
1967 [sender removeTarget:self | 1965 [sender removeTarget:self |
1968 action:@selector(preloadVoiceSearch:) | 1966 action:@selector(preloadVoiceSearch:) |
1969 forControlEvents:UIControlEventTouchDown]; | 1967 forControlEvents:UIControlEventTouchDown]; |
1970 | 1968 |
1971 // Use a GenericChromeCommand because |sender| already has a tag set for a | 1969 // Use a GenericChromeCommand because |sender| already has a tag set for a |
1972 // different command. | 1970 // different command. |
1973 GenericChromeCommand* command = | 1971 base::scoped_nsobject<GenericChromeCommand> command( |
1974 [[GenericChromeCommand alloc] initWithTag:IDC_PRELOAD_VOICE_SEARCH]; | 1972 [[GenericChromeCommand alloc] initWithTag:IDC_PRELOAD_VOICE_SEARCH]); |
1975 [sender chromeExecuteCommand:command]; | 1973 [sender chromeExecuteCommand:command]; |
1976 } | 1974 } |
1977 | 1975 |
1978 // Called when the keyboard voice search button is tapped with voice search | 1976 // Called when the keyboard voice search button is tapped with voice search |
1979 // disabled. Hides the voice search button but takes no other action. | 1977 // disabled. Hides the voice search button but takes no other action. |
1980 - (void)ignoreVoiceSearch:(id)sender { | 1978 - (void)ignoreVoiceSearch:(id)sender { |
1981 [_keyboardVoiceSearchButton setHidden:YES]; | 1979 [_keyboardVoiceSearchButton setHidden:YES]; |
1982 } | 1980 } |
1983 | 1981 |
1984 - (CGFloat)omniboxLeading { | 1982 - (CGFloat)omniboxLeading { |
(...skipping 482 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2467 // If |width| is 0, the current view's width is acceptable. | 2465 // If |width| is 0, the current view's width is acceptable. |
2468 if (width < 1) | 2466 if (width < 1) |
2469 width = [self view].frame.size.width; | 2467 width = [self view].frame.size.width; |
2470 | 2468 |
2471 // Snapshot is not used on the iPad. | 2469 // Snapshot is not used on the iPad. |
2472 if (IsIPadIdiom()) { | 2470 if (IsIPadIdiom()) { |
2473 NOTREACHED(); | 2471 NOTREACHED(); |
2474 return; | 2472 return; |
2475 } | 2473 } |
2476 // If the snapshot is valid, don't redraw. | 2474 // If the snapshot is valid, don't redraw. |
2477 if (_snapshot && _snapshotHash == [self snapshotHashWithWidth:width]) | 2475 if (_snapshot.get() && _snapshotHash == [self snapshotHashWithWidth:width]) |
2478 return; | 2476 return; |
2479 | 2477 |
2480 // Don't update the snapshot while the progress bar is moving, or while the | 2478 // Don't update the snapshot while the progress bar is moving, or while the |
2481 // tools menu is open, unless |force| is true. | 2479 // tools menu is open, unless |force| is true. |
2482 BOOL shouldRedraw = force || ([self toolsPopupController] == nil && | 2480 BOOL shouldRedraw = force || ([self toolsPopupController] == nil && |
2483 [_determinateProgressView isHidden]); | 2481 [_determinateProgressView isHidden]); |
2484 if (!shouldRedraw) | 2482 if (!shouldRedraw) |
2485 return; | 2483 return; |
2486 | 2484 |
2487 if ([[self delegate] | 2485 if ([[self delegate] |
2488 respondsToSelector:@selector(willUpdateToolbarSnapshot)]) { | 2486 respondsToSelector:@selector(willUpdateToolbarSnapshot)]) { |
2489 [[self delegate] willUpdateToolbarSnapshot]; | 2487 [[self delegate] willUpdateToolbarSnapshot]; |
2490 } | 2488 } |
2491 | 2489 |
2492 // Temporarily resize the toolbar if necessary in order to match the desired | 2490 // Temporarily resize the toolbar if necessary in order to match the desired |
2493 // width. (Such a mismatch can occur if the device has been rotated while this | 2491 // width. (Such a mismatch can occur if the device has been rotated while this |
2494 // view was not visible, for example.) | 2492 // view was not visible, for example.) |
2495 CGRect frame = [self view].frame; | 2493 CGRect frame = [self view].frame; |
2496 CGFloat oldWidth = frame.size.width; | 2494 CGFloat oldWidth = frame.size.width; |
2497 frame.size.width = width; | 2495 frame.size.width = width; |
2498 [self view].frame = frame; | 2496 [self view].frame = frame; |
2499 | 2497 |
2500 UIGraphicsBeginImageContextWithOptions(frame.size, NO, 0.0); | 2498 UIGraphicsBeginImageContextWithOptions(frame.size, NO, 0.0); |
2501 [[self view].layer renderInContext:UIGraphicsGetCurrentContext()]; | 2499 [[self view].layer renderInContext:UIGraphicsGetCurrentContext()]; |
2502 _snapshot = UIGraphicsGetImageFromCurrentImageContext(); | 2500 _snapshot.reset([UIGraphicsGetImageFromCurrentImageContext() retain]); |
2503 UIGraphicsEndImageContext(); | 2501 UIGraphicsEndImageContext(); |
2504 | 2502 |
2505 // In the past, when the current tab was prerendered, taking a snapshot | 2503 // In the past, when the current tab was prerendered, taking a snapshot |
2506 // sometimes lead to layout of its UIWebView. As this may be the fist time | 2504 // sometimes lead to layout of its UIWebView. As this may be the fist time |
2507 // the UIWebViews was layed out, its scroll view was scrolled. This lead | 2505 // the UIWebViews was layed out, its scroll view was scrolled. This lead |
2508 // to scroll events that changed the frame of the toolbar when fullscreen | 2506 // to scroll events that changed the frame of the toolbar when fullscreen |
2509 // was enabled. | 2507 // was enabled. |
2510 // DCHECK that the toolbar frame does not change while taking a snapshot. | 2508 // DCHECK that the toolbar frame does not change while taking a snapshot. |
2511 DCHECK_EQ(frame.origin.x, [self view].frame.origin.x); | 2509 DCHECK_EQ(frame.origin.x, [self view].frame.origin.x); |
2512 DCHECK_EQ(frame.origin.y, [self view].frame.origin.y); | 2510 DCHECK_EQ(frame.origin.y, [self view].frame.origin.y); |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2567 | 2565 |
2568 - (BOOL)isLoading { | 2566 - (BOOL)isLoading { |
2569 return ![_determinateProgressView isHidden]; | 2567 return ![_determinateProgressView isHidden]; |
2570 } | 2568 } |
2571 | 2569 |
2572 - (BOOL)isPrerenderAnimationRunning { | 2570 - (BOOL)isPrerenderAnimationRunning { |
2573 return _prerenderAnimating; | 2571 return _prerenderAnimating; |
2574 } | 2572 } |
2575 | 2573 |
2576 - (OmniboxTextFieldIOS*)omnibox { | 2574 - (OmniboxTextFieldIOS*)omnibox { |
2577 return _omniBox; | 2575 return _omniBox.get(); |
2578 } | 2576 } |
2579 | 2577 |
2580 @end | 2578 @end |
OLD | NEW |