Chromium Code Reviews| Index: ios/chrome/browser/tabs/tab.mm |
| diff --git a/ios/chrome/browser/tabs/tab.mm b/ios/chrome/browser/tabs/tab.mm |
| index 6bb0c4ab49b34abb3b75b8b970a06213c483dd4f..03526bae46f7162a53e296a902610a04d6d553f2 100644 |
| --- a/ios/chrome/browser/tabs/tab.mm |
| +++ b/ios/chrome/browser/tabs/tab.mm |
| @@ -12,13 +12,11 @@ |
| #include "base/bind.h" |
| #include "base/ios/block_types.h" |
| -#import "base/ios/weak_nsobject.h" |
| #include "base/json/string_escape.h" |
| #include "base/logging.h" |
| #include "base/mac/bind_objc_block.h" |
| #include "base/mac/foundation_util.h" |
| -#include "base/mac/objc_property_releaser.h" |
| -#include "base/mac/scoped_nsobject.h" |
| +#include "base/memory/ptr_util.h" |
| #include "base/metrics/histogram_macros.h" |
| #include "base/metrics/user_metrics.h" |
| #include "base/metrics/user_metrics_action.h" |
| @@ -144,9 +142,9 @@ |
| #include "ui/base/page_transition_types.h" |
| #include "url/origin.h" |
| -using base::UserMetricsAction; |
| -using web::NavigationManagerImpl; |
| -using net::RequestTracker; |
| +#if !defined(__has_feature) || !__has_feature(objc_arc) |
| +#error "This file requires ARC support." |
| +#endif |
| NSString* const kTabUrlStartedLoadingNotificationForCrashReporting = |
| @"kTabUrlStartedLoadingNotificationForCrashReporting"; |
| @@ -204,17 +202,27 @@ bool IsItemRedirectItem(web::NavigationItem* item) { |
| return (ui::PageTransition::PAGE_TRANSITION_IS_REDIRECT_MASK & |
| item->GetTransitionType()) == 0; |
| } |
| + |
| +// TabHistoryContext is used by history to scope the lifetime of navigation |
| +// entry references to Tab. |
| +class TabHistoryContext : public history::Context { |
| + public: |
| + TabHistoryContext() {} |
| + ~TabHistoryContext() {} |
| + |
| + private: |
| + DISALLOW_COPY_AND_ASSIGN(TabHistoryContext); |
| +}; |
| } // namespace |
| @interface Tab ()<CRWWebStateObserver, |
| CRWWebControllerObserver, |
| FindInPageControllerDelegate, |
| ReaderModeControllerDelegate> { |
| - TabModel* parentTabModel_; // weak |
| - ios::ChromeBrowserState* browserState_; // weak |
| + __weak TabModel* parentTabModel_; |
| + ios::ChromeBrowserState* browserState_; |
| - base::scoped_nsobject<OpenInController> openInController_; |
| - base::WeakNSProtocol<id<PassKitDialogProvider>> passKitDialogProvider_; |
| + OpenInController* openInController_; |
| // Whether or not this tab is currently being displayed. |
| BOOL visible_; |
| @@ -237,69 +245,41 @@ bool IsItemRedirectItem(web::NavigationItem* item) { |
| // Last visited timestamp. |
| double lastVisitedTimestamp_; |
| - base::mac::ObjCPropertyReleaser propertyReleaser_Tab_; |
| - |
| - id<TabDelegate> delegate_; // weak |
| - base::WeakNSProtocol<id<TabDialogDelegate>> dialogDelegate_; |
| - base::WeakNSProtocol<id<SnapshotOverlayProvider>> snapshotOverlayProvider_; |
| - |
| - // Delegate used for snapshotting geometry. |
| - id<TabSnapshottingDelegate> tabSnapshottingDelegate_; // weak |
| - |
| // The Full Screen Controller responsible for hiding/showing the toolbar. |
| - base::scoped_nsobject<FullScreenController> fullScreenController_; |
| - |
| - // The delegate responsible for headers over the tab. |
| - id<TabHeadersDelegate> tabHeadersDelegate_; // weak |
| - |
| - base::WeakNSProtocol<id<FullScreenControllerDelegate>> |
| - fullScreenControllerDelegate_; |
| + FullScreenController* fullScreenController_; |
| // The Overscroll controller responsible for displaying the |
| // overscrollActionsView above the toolbar. |
| - base::scoped_nsobject<OverscrollActionsController> |
| - overscrollActionsController_; |
| - base::WeakNSProtocol<id<OverscrollActionsControllerDelegate>> |
| - overscrollActionsControllerDelegate_; |
| - |
| - base::scoped_nsobject<NSString> tabId_; |
| + OverscrollActionsController* overscrollActionsController_; |
| // Lightweight object dealing with various different UI behaviours when |
| // opening a URL in an external application. |
| - base::scoped_nsobject<ExternalAppLauncher> externalAppLauncher_; |
| + ExternalAppLauncher* externalAppLauncher_; |
| // Handles suggestions for form entry. |
| - base::scoped_nsobject<FormSuggestionController> suggestionController_; |
| + FormSuggestionController* suggestionController_; |
| // Manages the input accessory view during form input. |
| - base::scoped_nsobject<FormInputAccessoryViewController> |
| - inputAccessoryViewController_; |
| - |
| - // TODO(crbug.com/661665): move the WebContentsObservers into their own |
| - // container. |
| - // Handles saving and autofill of passwords. |
| - base::scoped_nsobject<PasswordController> passwordController_; |
| + FormInputAccessoryViewController* inputAccessoryViewController_; |
| // Handles autofill. |
| - base::scoped_nsobject<AutofillController> autofillController_; |
| + AutofillController* autofillController_; |
| // Handles GAL infobar on web pages. |
| - base::scoped_nsobject<NativeAppNavigationController> |
| - nativeAppNavigationController_; |
| + NativeAppNavigationController* nativeAppNavigationController_; |
| // Handles caching and retrieving of snapshots. |
| - base::scoped_nsobject<SnapshotManager> snapshotManager_; |
| + SnapshotManager* snapshotManager_; |
| // Handles retrieving, generating and updating snapshots of CRWWebController's |
| // web page. |
| - base::scoped_nsobject<WebControllerSnapshotHelper> |
| - webControllerSnapshotHelper_; |
| + WebControllerSnapshotHelper* webControllerSnapshotHelper_; |
| // Handles support for window.print JavaScript calls. |
| std::unique_ptr<PrintObserver> printObserver_; |
| // AutoReloadBridge for this tab. |
| - base::scoped_nsobject<AutoReloadBridge> autoReloadBridge_; |
| + AutoReloadBridge* autoReloadBridge_; |
| // WebStateImpl for this tab. |
| web::WebStateImpl* webStateImpl_; |
| @@ -309,16 +289,13 @@ bool IsItemRedirectItem(web::NavigationItem* item) { |
| // Context used by history to scope the lifetime of navigation entry |
| // references to Tab. |
| - std::unique_ptr<TabHistoryContext> tabHistoryContext_; |
| - |
| - // The controller for everything related to reader mode. |
| - base::scoped_nsobject<ReaderModeController> readerModeController_; |
| + TabHistoryContext tabHistoryContext_; |
| // C++ bridge that receives notifications from the FaviconDriver. |
| std::unique_ptr<FaviconDriverObserverBridge> faviconDriverObserverBridge_; |
| // U2F call controller object. |
| - base::scoped_nsobject<U2FController> U2FController_; |
| + U2FController* U2FController_; |
| // C++ observer used to trigger snapshots after the removal of InfoBars. |
| std::unique_ptr<TabInfoBarObserver> tabInfoBarObserver_; |
| @@ -367,17 +344,6 @@ bool IsItemRedirectItem(web::NavigationItem* item) { |
| @end |
| namespace { |
| -// TabHistoryContext is used by history to scope the lifetime of navigation |
| -// entry references to Tab. |
| -class TabHistoryContext : public history::Context { |
| - public: |
| - TabHistoryContext() {} |
| - ~TabHistoryContext() {} |
| - |
| - private: |
| - DISALLOW_COPY_AND_ASSIGN(TabHistoryContext); |
| -}; |
| - |
| class FaviconDriverObserverBridge : public favicon::FaviconDriverObserver { |
| public: |
| FaviconDriverObserverBridge(Tab* owner, |
| @@ -392,7 +358,7 @@ class FaviconDriverObserverBridge : public favicon::FaviconDriverObserver { |
| const gfx::Image& image) override; |
| private: |
| - Tab* owner_; // Owns this instance. |
| + __weak Tab* owner_; |
| ScopedObserver<favicon::FaviconDriver, favicon::FaviconDriverObserver> |
| scoped_observer_; |
| DISALLOW_COPY_AND_ASSIGN(FaviconDriverObserverBridge); |
| @@ -428,7 +394,7 @@ class TabInfoBarObserver : public infobars::InfoBarManager::Observer { |
| infobars::InfoBar* new_infobar) override; |
| private: |
| - Tab* owner_; // Owns this instance; |
| + __weak Tab* owner_; |
| ScopedObserver<infobars::InfoBarManager, TabInfoBarObserver> scoped_observer_; |
| DISALLOW_COPY_AND_ASSIGN(TabInfoBarObserver); |
| }; |
| @@ -473,27 +439,33 @@ void TabInfoBarObserver::OnInfoBarReplaced(infobars::InfoBar* old_infobar, |
| @implementation Tab |
| @synthesize browserState = browserState_; |
| +@synthesize tabId = tabId_; |
| @synthesize useGreyImageCache = useGreyImageCache_; |
| @synthesize isPrerenderTab = isPrerenderTab_; |
| @synthesize isLinkLoadingPrerenderTab = isLinkLoadingPrerenderTab_; |
| @synthesize isVoiceSearchResultsTab = isVoiceSearchResultsTab_; |
| +@synthesize passwordController = passwordController_; |
| +@synthesize overscrollActionsController = overscrollActionsController_; |
| +@synthesize readerModeController = readerModeController_; |
| +@synthesize overscrollActionsControllerDelegate = |
| + overscrollActionsControllerDelegate_; |
| +@synthesize passKitDialogProvider = passKitDialogProvider_; |
| @synthesize delegate = delegate_; |
| +@synthesize dialogDelegate = dialogDelegate_; |
| +@synthesize snapshotOverlayProvider = snapshotOverlayProvider_; |
| @synthesize tabSnapshottingDelegate = tabSnapshottingDelegate_; |
| @synthesize tabHeadersDelegate = tabHeadersDelegate_; |
| +@synthesize fullScreenControllerDelegate = fullScreenControllerDelegate_; |
| - (instancetype)initWithWebState:(web::WebState*)webState { |
| DCHECK(webState); |
| self = [super init]; |
| if (self) { |
| - propertyReleaser_Tab_.Init(self, [Tab class]); |
| - |
| // TODO(crbug.com/620465): Tab should only use public API of WebState. |
| // Remove this cast once this is the case. |
| webStateImpl_ = static_cast<web::WebStateImpl*>(webState); |
| browserState_ = |
| ios::ChromeBrowserState::FromBrowserState(webState->GetBrowserState()); |
| - |
| - tabHistoryContext_ = base::MakeUnique<TabHistoryContext>(); |
| webStateObserver_ = |
| base::MakeUnique<web::WebStateObserverBridge>(webState, self); |
| @@ -501,10 +473,10 @@ void TabInfoBarObserver::OnInfoBarReplaced(infobars::InfoBar* old_infobar, |
| [[self webController] addObserver:self]; |
| [[self webController] setDelegate:self]; |
| - snapshotManager_.reset([[SnapshotManager alloc] init]); |
| - webControllerSnapshotHelper_.reset([[WebControllerSnapshotHelper alloc] |
| + snapshotManager_ = [[SnapshotManager alloc] init]; |
| + webControllerSnapshotHelper_ = [[WebControllerSnapshotHelper alloc] |
| initWithSnapshotManager:snapshotManager_ |
| - tab:self]); |
| + tab:self]; |
| [self initNativeAppNavigationController]; |
| @@ -518,40 +490,39 @@ void TabInfoBarObserver::OnInfoBarReplaced(infobars::InfoBar* old_infobar, |
| } |
| - (void)attachTabHelpers { |
| - tabInfoBarObserver_.reset(new TabInfoBarObserver(self)); |
| + tabInfoBarObserver_ = base::MakeUnique<TabInfoBarObserver>(self); |
| tabInfoBarObserver_->SetShouldObserveInfoBarManager(true); |
| - if (experimental_flags::IsAutoReloadEnabled()) { |
| - autoReloadBridge_.reset([[AutoReloadBridge alloc] initWithTab:self]); |
| - } |
| + if (experimental_flags::IsAutoReloadEnabled()) |
| + autoReloadBridge_ = [[AutoReloadBridge alloc] initWithTab:self]; |
| printObserver_ = base::MakeUnique<PrintObserver>(self.webState); |
| base::scoped_nsprotocol<id<PasswordsUiDelegate>> passwordsUiDelegate( |
|
rohitrao (ping after 24h)
2017/05/02 11:42:54
Intentionally still using scoped_nsprotocol?
sdefresne
2017/05/02 15:08:51
No, I missed that one. Fixed. Thank you for the ca
|
| [[PasswordsUiDelegateImpl alloc] init]); |
| - passwordController_.reset([[PasswordController alloc] |
| - initWithWebState:self.webState |
| - passwordsUiDelegate:passwordsUiDelegate]); |
| + passwordController_ = |
| + [[PasswordController alloc] initWithWebState:self.webState |
| + passwordsUiDelegate:passwordsUiDelegate]; |
| password_manager::PasswordGenerationManager* passwordGenerationManager = |
| [passwordController_ passwordGenerationManager]; |
| - autofillController_.reset([[AutofillController alloc] |
| - initWithBrowserState:browserState_ |
| - passwordGenerationManager:passwordGenerationManager |
| - webState:self.webState]); |
| - suggestionController_.reset([[FormSuggestionController alloc] |
| + autofillController_ = |
| + [[AutofillController alloc] initWithBrowserState:browserState_ |
| + passwordGenerationManager:passwordGenerationManager |
| + webState:self.webState]; |
| + suggestionController_ = [[FormSuggestionController alloc] |
| initWithWebState:self.webState |
| - providers:[self suggestionProviders]]); |
| - inputAccessoryViewController_.reset([[FormInputAccessoryViewController alloc] |
| + providers:[self suggestionProviders]]; |
| + inputAccessoryViewController_ = [[FormInputAccessoryViewController alloc] |
| initWithWebState:self.webState |
| - providers:[self accessoryViewProviders]]); |
| + providers:[self accessoryViewProviders]]; |
| [self setShouldObserveFaviconChanges:YES]; |
| // Create the ReaderModeController immediately so it can register for |
| // WebState changes. |
| if (experimental_flags::IsReaderModeEnabled()) { |
| - readerModeController_.reset([[ReaderModeController alloc] |
| - initWithWebState:self.webState |
| - delegate:self]); |
| + readerModeController_ = |
| + [[ReaderModeController alloc] initWithWebState:self.webState |
| + delegate:self]; |
| } |
| } |
| @@ -580,7 +551,7 @@ void TabInfoBarObserver::OnInfoBarReplaced(infobars::InfoBar* old_infobar, |
| DCHECK(!model || !parentTabModel_); |
| parentTabModel_ = model; |
| - if (parentTabModel_.syncedWindowDelegate) { |
| + if ([parentTabModel_ syncedWindowDelegate]) { |
|
rohitrao (ping after 24h)
2017/05/02 11:42:54
This no longer works as a property?
sdefresne
2017/05/02 15:08:51
I had an intermediate steps where I changed parent
|
| IOSChromeSessionTabHelper::FromWebState(self.webState) |
| ->SetWindowID(model.sessionID); |
| } |
| @@ -603,10 +574,6 @@ void TabInfoBarObserver::OnInfoBarReplaced(infobars::InfoBar* old_infobar, |
| return [self.webController loadPhase] == web::PAGE_LOADED; |
| } |
| -- (void)setDialogDelegate:(id<TabDialogDelegate>)dialogDelegate { |
| - dialogDelegate_.reset(dialogDelegate); |
| -} |
| - |
| - (void)setIsVoiceSearchResultsTab:(BOOL)isVoiceSearchResultsTab { |
| // There is intentionally no equality check in this setter, as we want the |
| // notificaiton to be sent regardless of whether the value has changed. |
| @@ -614,10 +581,6 @@ void TabInfoBarObserver::OnInfoBarReplaced(infobars::InfoBar* old_infobar, |
| [parentTabModel_ notifyTabChanged:self]; |
| } |
| -- (PasswordController*)passwordController { |
| - return passwordController_.get(); |
| -} |
| - |
| - (void)retrieveSnapshot:(void (^)(UIImage*))callback { |
| [webControllerSnapshotHelper_ |
| retrieveSnapshotForWebController:self.webController |
| @@ -670,7 +633,7 @@ void TabInfoBarObserver::OnInfoBarReplaced(infobars::InfoBar* old_infobar, |
| - (NSString*)tabId { |
| if (tabId_) |
| - return tabId_.get(); |
| + return tabId_; |
| DCHECK(self.webState); |
| web::SerializableUserDataManager* userDataManager = |
| @@ -683,8 +646,8 @@ void TabInfoBarObserver::OnInfoBarReplaced(infobars::InfoBar* old_infobar, |
| userDataManager->AddSerializableData(tabId, kTabIDKey); |
| } |
| - tabId_.reset([tabId copy]); |
| - return tabId_.get(); |
| + tabId_ = [tabId copy]; |
| + return tabId_; |
| } |
| - (web::WebState*)webState { |
| @@ -698,9 +661,8 @@ void TabInfoBarObserver::OnInfoBarReplaced(infobars::InfoBar* old_infobar, |
| favicon::FaviconDriver* faviconDriver = |
| favicon::WebFaviconDriver::FromWebState(self.webState); |
| - if (faviconDriver) { |
| + if (faviconDriver) |
| faviconDriver->FetchFavicon(url); |
| - } |
| } |
| - (void)setFavicon:(const gfx::Image*)image { |
| @@ -727,9 +689,8 @@ void TabInfoBarObserver::OnInfoBarReplaced(infobars::InfoBar* old_infobar, |
| - (UIView*)view { |
| // Record reload of previously-evicted tab. |
| - if (![self.webController isViewAlive] && [parentTabModel_ tabUsageRecorder]) { |
| + if (![self.webController isViewAlive] && [parentTabModel_ tabUsageRecorder]) |
| [parentTabModel_ tabUsageRecorder]->RecordPageLoadStart(self); |
| - } |
| return self.webState ? self.webState->GetView() : nil; |
| } |
| @@ -769,10 +730,10 @@ void TabInfoBarObserver::OnInfoBarReplaced(infobars::InfoBar* old_infobar, |
| if (fullScreenController_) { |
| [fullScreenController_ invalidate]; |
| [self.webController removeObserver:fullScreenController_]; |
| - fullScreenController_.reset([[FullScreenController alloc] |
| + fullScreenController_ = [[FullScreenController alloc] |
| initWithDelegate:fullScreenControllerDelegate_ |
| navigationManager:self.navigationManager |
| - sessionID:self.tabId]); |
| + sessionID:self.tabId]; |
| [self.webController addObserver:fullScreenController_]; |
| // If the content of the page was loaded without knowledge of the |
| // toolbar position it will be misplaced under the toolbar instead of |
| @@ -816,23 +777,18 @@ void TabInfoBarObserver::OnInfoBarReplaced(infobars::InfoBar* old_infobar, |
| [self countMainFrameLoad]; |
| } |
| -- (id<FullScreenControllerDelegate>)fullScreenControllerDelegate { |
| - return fullScreenControllerDelegate_.get(); |
| -} |
| - |
| - (void)setFullScreenControllerDelegate: |
| (id<FullScreenControllerDelegate>)fullScreenControllerDelegate { |
| - if (fullScreenControllerDelegate == fullScreenControllerDelegate_) { |
| + if (fullScreenControllerDelegate == fullScreenControllerDelegate_) |
| return; |
| - } |
| // Lazily create a FullScreenController. |
| // The check for fullScreenControllerDelegate is necessary to avoid recreating |
| // a FullScreenController during teardown. |
| if (!fullScreenController_ && fullScreenControllerDelegate) { |
| - fullScreenController_.reset([[FullScreenController alloc] |
| + fullScreenController_ = [[FullScreenController alloc] |
| initWithDelegate:fullScreenControllerDelegate |
| navigationManager:self.navigationManager |
| - sessionID:self.tabId]); |
| + sessionID:self.tabId]; |
| [self.webController addObserver:fullScreenController_]; |
| // If the content of the page was loaded without knowledge of the |
| // toolbar position it will be misplaced under the toolbar instead of |
| @@ -840,41 +796,31 @@ void TabInfoBarObserver::OnInfoBarReplaced(infobars::InfoBar* old_infobar, |
| // sure the content is moved to the right place. |
| [fullScreenController_ moveContentBelowHeader]; |
| } |
| - fullScreenControllerDelegate_.reset(fullScreenControllerDelegate); |
| -} |
| - |
| -- (OverscrollActionsController*)overscrollActionsController { |
| - return overscrollActionsController_.get(); |
| -} |
| - |
| -- (id<OverscrollActionsControllerDelegate>)overscrollActionsControllerDelegate { |
| - return overscrollActionsControllerDelegate_.get(); |
| + fullScreenControllerDelegate_ = fullScreenControllerDelegate; |
| } |
| - (void)setOverscrollActionsControllerDelegate: |
| (id<OverscrollActionsControllerDelegate>) |
| overscrollActionsControllerDelegate { |
| if (overscrollActionsControllerDelegate_ == |
| - overscrollActionsControllerDelegate) |
| + overscrollActionsControllerDelegate) { |
| return; |
| + } |
| // Lazily create a OverscrollActionsController. |
| // The check for overscrollActionsControllerDelegate is necessary to avoid |
| // recreating a OverscrollActionsController during teardown. |
| if (!overscrollActionsController_) { |
| - overscrollActionsController_.reset( |
| - [[OverscrollActionsController alloc] init]); |
| + overscrollActionsController_ = [[OverscrollActionsController alloc] init]; |
| [self.webController addObserver:overscrollActionsController_]; |
| } |
| OverscrollStyle style = OverscrollStyle::REGULAR_PAGE_NON_INCOGNITO; |
| - if (browserState_->IsOffTheRecord()) { |
| + if (browserState_->IsOffTheRecord()) |
| style = OverscrollStyle::REGULAR_PAGE_INCOGNITO; |
| - } |
| [overscrollActionsController_ setStyle:style]; |
| [overscrollActionsController_ |
| setDelegate:overscrollActionsControllerDelegate]; |
| - overscrollActionsControllerDelegate_.reset( |
| - overscrollActionsControllerDelegate); |
| + overscrollActionsControllerDelegate_ = overscrollActionsControllerDelegate; |
| } |
| - (void)saveTitleToHistoryDB { |
| @@ -884,8 +830,9 @@ void TabInfoBarObserver::OnInfoBarReplaced(infobars::InfoBar* old_infobar, |
| // Don't update the history if current entry has no title. |
| NSString* title = [self title]; |
| if (![title length] || |
| - [title isEqualToString:l10n_util::GetNSString(IDS_DEFAULT_TAB_TITLE)]) |
| + [title isEqualToString:l10n_util::GetNSString(IDS_DEFAULT_TAB_TITLE)]) { |
| return; |
| + } |
| history::HistoryService* historyService = |
| ios::HistoryServiceFactory::GetForBrowserState( |
| @@ -951,12 +898,12 @@ void TabInfoBarObserver::OnInfoBarReplaced(infobars::InfoBar* old_infobar, |
| referrer.url != GURL(kChromeContentSuggestionsReferrer); |
| history::HistoryAddPageArgs args( |
| - url, item->GetTimestamp(), tabHistoryContext_.get(), |
| - item->GetUniqueID(), referrer.url, redirects, item->GetTransitionType(), |
| + url, item->GetTimestamp(), &tabHistoryContext_, item->GetUniqueID(), |
| + referrer.url, redirects, item->GetTransitionType(), |
| history::SOURCE_BROWSED, false, consider_for_ntp_most_visited); |
| addPageVector_.push_back(args); |
| } else { |
| - historyService->AddPage(url, item->GetTimestamp(), tabHistoryContext_.get(), |
| + historyService->AddPage(url, item->GetTimestamp(), &tabHistoryContext_, |
| item->GetUniqueID(), referrer.url, redirects, |
| item->GetTransitionType(), history::SOURCE_BROWSED, |
| false); |
| @@ -1004,7 +951,7 @@ void TabInfoBarObserver::OnInfoBarReplaced(infobars::InfoBar* old_infobar, |
| if (!initialNavigation && !isPrerenderTab_ && |
| !PageTransitionCoreTypeIs(transition, ui::PAGE_TRANSITION_RELOAD) && |
| (transition & ui::PAGE_TRANSITION_IS_REDIRECT_MASK) == 0) { |
| - base::RecordAction(UserMetricsAction("MobileTabClobbered")); |
| + base::RecordAction(base::UserMetricsAction("MobileTabClobbered")); |
| } |
| if ([parentTabModel_ tabUsageRecorder]) |
| [parentTabModel_ tabUsageRecorder]->RecordPageLoadStart(self); |
| @@ -1033,9 +980,8 @@ void TabInfoBarObserver::OnInfoBarReplaced(infobars::InfoBar* old_infobar, |
| } |
| - (void)webWillReload { |
| - if ([parentTabModel_ tabUsageRecorder]) { |
| + if ([parentTabModel_ tabUsageRecorder]) |
| [parentTabModel_ tabUsageRecorder]->RecordReload(self); |
| - } |
| } |
| // Halt the tab, which amounts to halting its webController. |
| @@ -1053,24 +999,24 @@ void TabInfoBarObserver::OnInfoBarReplaced(infobars::InfoBar* old_infobar, |
| [[NSNotificationCenter defaultCenter] removeObserver:self]; |
| [passwordController_ detach]; |
| - passwordController_.reset(); |
| + passwordController_ = nil; |
| tabInfoBarObserver_.reset(); |
| faviconDriverObserverBridge_.reset(); |
| [openInController_ detachFromWebController]; |
| - openInController_.reset(); |
| + openInController_ = nil; |
| [autofillController_ detachFromWebState]; |
| [suggestionController_ detachFromWebState]; |
| if (fullScreenController_) |
| [self.webController removeObserver:fullScreenController_]; |
| [fullScreenController_ invalidate]; |
| - fullScreenController_.reset(); |
| + fullScreenController_ = nil; |
| if (overscrollActionsController_) |
| [self.webController removeObserver:overscrollActionsController_]; |
| [overscrollActionsController_ invalidate]; |
| - overscrollActionsController_.reset(); |
| + overscrollActionsController_ = nil; |
| [readerModeController_ detachFromWebState]; |
| - readerModeController_.reset(); |
| + readerModeController_ = nil; |
| // Invalidate any snapshot stored for this session. |
| DCHECK(self.tabId); |
| @@ -1099,8 +1045,8 @@ void TabInfoBarObserver::OnInfoBarReplaced(infobars::InfoBar* old_infobar, |
| favicon::WebFaviconDriver::FromWebState(self.webState); |
| // Some MockWebContents used in tests do not support the FaviconDriver. |
| if (faviconDriver) { |
| - faviconDriverObserverBridge_.reset( |
| - new FaviconDriverObserverBridge(self, faviconDriver)); |
| + faviconDriverObserverBridge_ = |
| + base::MakeUnique<FaviconDriverObserverBridge>(self, faviconDriver); |
| } |
| } else { |
| faviconDriverObserverBridge_.reset(); |
| @@ -1110,7 +1056,7 @@ void TabInfoBarObserver::OnInfoBarReplaced(infobars::InfoBar* old_infobar, |
| - (void)goBack { |
| if (self.navigationManager) { |
| DCHECK(self.navigationManager->CanGoBack()); |
| - base::RecordAction(UserMetricsAction("Back")); |
| + base::RecordAction(base::UserMetricsAction("Back")); |
| self.navigationManager->GoBack(); |
| } |
| } |
| @@ -1118,7 +1064,7 @@ void TabInfoBarObserver::OnInfoBarReplaced(infobars::InfoBar* old_infobar, |
| - (void)goForward { |
| if (self.navigationManager) { |
| DCHECK(self.navigationManager->CanGoForward()); |
| - base::RecordAction(UserMetricsAction("Forward")); |
| + base::RecordAction(base::UserMetricsAction("Forward")); |
| self.navigationManager->GoForward(); |
| } |
| } |
| @@ -1146,28 +1092,26 @@ void TabInfoBarObserver::OnInfoBarReplaced(infobars::InfoBar* old_infobar, |
| - (BOOL)openExternalURL:(const GURL&)url |
| sourceURL:(const GURL&)sourceURL |
| linkClicked:(BOOL)linkClicked { |
| - if (!externalAppLauncher_.get()) |
| - externalAppLauncher_.reset([[ExternalAppLauncher alloc] init]); |
| + if (!externalAppLauncher_) |
| + externalAppLauncher_ = [[ExternalAppLauncher alloc] init]; |
| // This method may release CRWWebController which may cause a crash |
| // (crbug.com/393949). |
| - [[self.webController retain] autorelease]; |
| + // [[self.webController retain] autorelease]; |
|
rohitrao (ping after 24h)
2017/05/02 11:42:54
What is the plan for replacing this call? Should
sdefresne
2017/05/02 15:08:51
This call can be safely removed as the lifetime of
|
| // Make a local url copy for possible modification. |
| GURL finalURL = url; |
| // Check if it's a direct FIDO U2F x-callback call. If so, do not open it, to |
| // prevent pages from spoofing requests with different origins. |
| - if (finalURL.SchemeIs("u2f-x-callback")) { |
| + if (finalURL.SchemeIs("u2f-x-callback")) |
| return NO; |
| - } |
| // Check if it's a FIDO U2F call. |
| if (finalURL.SchemeIs("u2f")) { |
| // Create U2FController object lazily. |
| - if (!U2FController_) { |
| - U2FController_.reset([[U2FController alloc] init]); |
| - } |
| + if (!U2FController_) |
| + U2FController_ = [[U2FController alloc] init]; |
| DCHECK([self navigationManager]); |
| GURL origin = |
| @@ -1179,9 +1123,8 @@ void TabInfoBarObserver::OnInfoBarReplaced(infobars::InfoBar* old_infobar, |
| tabURL:self.url |
| tabID:self.tabId]; |
| - if (!finalURL.is_valid()) { |
| + if (!finalURL.is_valid()) |
| return NO; |
| - } |
| } |
| if ([externalAppLauncher_ openURL:finalURL linkClicked:linkClicked]) { |
| @@ -1196,9 +1139,8 @@ void TabInfoBarObserver::OnInfoBarReplaced(infobars::InfoBar* old_infobar, |
| if (sourceURL.is_valid()) { |
| ReadingListModel* model = |
| ReadingListModelFactory::GetForBrowserState(browserState_); |
| - if (model && model->loaded()) { |
| + if (model && model->loaded()) |
| model->SetReadStatus(sourceURL, true); |
| - } |
| } |
| return YES; |
| @@ -1209,11 +1151,10 @@ void TabInfoBarObserver::OnInfoBarReplaced(infobars::InfoBar* old_infobar, |
| - (void)webState:(web::WebState*)webState |
| didFinishNavigation:(web::NavigationContext*)navigation { |
| if (navigation->IsSameDocument()) { |
| + // Fetch the favicon for the new URL. |
| auto* faviconDriver = favicon::WebFaviconDriver::FromWebState(webState); |
| - if (faviconDriver) { |
| - // Fetch the favicon for the new URL. |
| + if (faviconDriver) |
| faviconDriver->FetchFavicon(navigation->GetUrl()); |
| - } |
| } |
| if (!navigation->IsErrorPage()) { |
| @@ -1244,18 +1185,18 @@ void TabInfoBarObserver::OnInfoBarReplaced(infobars::InfoBar* old_infobar, |
| - (OpenInController*)openInController { |
| if (!openInController_) { |
| - openInController_.reset([[OpenInController alloc] |
| + openInController_ = [[OpenInController alloc] |
| initWithRequestContext:browserState_->GetRequestContext() |
| - webController:self.webController]); |
| + webController:self.webController]; |
| } |
| - return openInController_.get(); |
| + return openInController_; |
| } |
| - (id<CRWNativeContent>)controllerForUnhandledContentAtURL:(const GURL&)url { |
| // Shows download manager UI for unhandled content. |
| DownloadManagerController* downloadController = |
| - [[[DownloadManagerController alloc] initWithWebState:self.webState |
| - downloadURL:url] autorelease]; |
| + [[DownloadManagerController alloc] initWithWebState:self.webState |
| + downloadURL:url]; |
| [downloadController start]; |
| return downloadController; |
| } |
| @@ -1288,22 +1229,21 @@ void TabInfoBarObserver::OnInfoBarReplaced(infobars::InfoBar* old_infobar, |
| } |
| - (void)countMainFrameLoad { |
| - if ([self isPrerenderTab] || [self url].SchemeIs(kChromeUIScheme)) { |
| + if ([self isPrerenderTab] || [self url].SchemeIs(kChromeUIScheme)) |
| return; |
| - } |
| - base::RecordAction(UserMetricsAction("MobilePageLoaded")); |
| + base::RecordAction(base::UserMetricsAction("MobilePageLoaded")); |
| } |
| - (void)applicationDidBecomeActive { |
| - if (requireReloadAfterBecomingActive_) { |
| - if (visible_) { |
| - self.navigationManager->Reload(web::ReloadType::NORMAL, |
| - false /* check_for_repost */); |
| - } else { |
| - [self.webController requirePageReload]; |
| - } |
| - requireReloadAfterBecomingActive_ = NO; |
| + if (!requireReloadAfterBecomingActive_) |
| + return; |
| + if (visible_) { |
| + self.navigationManager->Reload(web::ReloadType::NORMAL, |
| + false /* check_for_repost */); |
| + } else { |
| + [self.webController requirePageReload]; |
| } |
| + requireReloadAfterBecomingActive_ = NO; |
| } |
| #pragma mark - |
| @@ -1329,10 +1269,6 @@ void TabInfoBarObserver::OnInfoBarReplaced(infobars::InfoBar* old_infobar, |
| return self.view; |
| } |
| -- (ReaderModeController*)readerModeController { |
| - return readerModeController_.get(); |
| -} |
| - |
| - (BOOL)canSwitchToReaderMode { |
| // Only if the page is loaded and the page passes suitability checks. |
| ReaderModeController* controller = self.readerModeController; |
| @@ -1410,15 +1346,6 @@ void TabInfoBarObserver::OnInfoBarReplaced(infobars::InfoBar* old_infobar, |
| navigationManager->LoadURLWithParams(params); |
| } |
| -- (id<SnapshotOverlayProvider>)snapshotOverlayProvider { |
| - return snapshotOverlayProvider_.get(); |
| -} |
| - |
| -- (void)setSnapshotOverlayProvider: |
| - (id<SnapshotOverlayProvider>)snapshotOverlayProvider { |
| - snapshotOverlayProvider_.reset(snapshotOverlayProvider); |
| -} |
| - |
| - (void)evaluateU2FResultFromURL:(const GURL&)URL { |
| DCHECK(U2FController_); |
| [U2FController_ evaluateU2FResultFromU2FURL:URL webState:self.webState]; |
| @@ -1459,7 +1386,7 @@ void TabInfoBarObserver::OnInfoBarReplaced(infobars::InfoBar* old_infobar, |
| // checked in several places. |
| if (isUserNavigationEvent && !isPrerenderTab_ && |
| ![self navigationManager]->GetPendingItem() && url != self.url) { |
| - base::RecordAction(UserMetricsAction("MobileTabClobbered")); |
| + base::RecordAction(base::UserMetricsAction("MobileTabClobbered")); |
| if ([parentTabModel_ tabUsageRecorder]) |
| [parentTabModel_ tabUsageRecorder]->RecordPageLoadStart(self); |
| } |
| @@ -1498,9 +1425,8 @@ void TabInfoBarObserver::OnInfoBarReplaced(infobars::InfoBar* old_infobar, |
| } |
| favicon::FaviconDriver* faviconDriver = |
| favicon::WebFaviconDriver::FromWebState(webState); |
| - if (faviconDriver) { |
| + if (faviconDriver) |
| faviconDriver->FetchFavicon(lastCommittedURL); |
| - } |
| [parentTabModel_ notifyTabChanged:self]; |
| if (parentTabModel_) { |
| [[NSNotificationCenter defaultCenter] |
| @@ -1553,9 +1479,8 @@ void TabInfoBarObserver::OnInfoBarReplaced(infobars::InfoBar* old_infobar, |
| else |
| [autoReloadBridge_ loadFailedForURL:lastCommittedURL wasPost:wasPost]; |
| [webControllerSnapshotHelper_ setSnapshotCoalescingEnabled:YES]; |
| - if (!loadSuccess) { |
| + if (!loadSuccess) |
| [fullScreenController_ disableFullScreen]; |
| - } |
| [self recordInterfaceOrientation]; |
| navigation_metrics::RecordMainFrameNavigation( |
| lastCommittedURL, true, self.browserState->IsOffTheRecord()); |
| @@ -1584,9 +1509,8 @@ void TabInfoBarObserver::OnInfoBarReplaced(infobars::InfoBar* old_infobar, |
| finishPageLoadForTab:self |
| loadSuccess:loadSuccess]; |
| - if (loadSuccess) { |
| + if (loadSuccess) |
| [self updateSnapshotWithOverlay:YES visibleFrameOnly:YES]; |
| - } |
| [webControllerSnapshotHelper_ setSnapshotCoalescingEnabled:NO]; |
| } |
| @@ -1631,8 +1555,8 @@ void TabInfoBarObserver::OnInfoBarReplaced(infobars::InfoBar* old_infobar, |
| return NO; |
| base::scoped_nsprotocol<id<NativeAppMetadata>> metadata( |
|
rohitrao (ping after 24h)
2017/05/02 11:42:54
Are we intentionally still using scoped_nsprotocol
sdefresne
2017/05/02 15:08:51
No, it was a mistake (but the code has been remove
|
| - [[ios::GetChromeBrowserProvider()->GetNativeAppWhitelistManager() |
| - nativeAppForURL:url] retain]); |
| + [ios::GetChromeBrowserProvider()->GetNativeAppWhitelistManager() |
| + nativeAppForURL:url]); |
| if (![metadata shouldAutoOpenLinks]) |
| return NO; |
| @@ -1686,9 +1610,8 @@ void TabInfoBarObserver::OnInfoBarReplaced(infobars::InfoBar* old_infobar, |
| // Always allow frame loads. |
| BOOL isFrameLoad = (url != mainDocumentURL); |
| - if (isFrameLoad) { |
| + if (isFrameLoad) |
| return YES; |
| - } |
| // TODO(crbug.com/546402): If this turns out to be useful, find a less hacky |
| // hook point to send this from. |
| @@ -1817,9 +1740,8 @@ void TabInfoBarObserver::OnInfoBarReplaced(infobars::InfoBar* old_infobar, |
| } |
| if (visible_) { |
| - if (!applicationIsNotActive) { |
| + if (!applicationIsNotActive) |
| [fullScreenController_ disableFullScreen]; |
| - } |
| } else { |
| [self.webController requirePageReload]; |
| } |
| @@ -1861,8 +1783,8 @@ void TabInfoBarObserver::OnInfoBarReplaced(infobars::InfoBar* old_infobar, |
| signin_metrics::LogAccountReconcilorStateOnGaiaResponse( |
| ios::AccountReconcilorFactory::GetForBrowserState(browserState_) |
| ->GetState()); |
| - base::scoped_nsobject<GenericChromeCommand> command( |
| - [[GenericChromeCommand alloc] initWithTag:IDC_SHOW_ACCOUNTS_SETTINGS]); |
| + GenericChromeCommand* command = |
| + [[GenericChromeCommand alloc] initWithTag:IDC_SHOW_ACCOUNTS_SETTINGS]; |
| [self.view chromeExecuteCommand:command]; |
| } |
| @@ -1877,8 +1799,8 @@ void TabInfoBarObserver::OnInfoBarReplaced(infobars::InfoBar* old_infobar, |
| signin_metrics::LogAccountReconcilorStateOnGaiaResponse( |
| ios::AccountReconcilorFactory::GetForBrowserState(browserState_) |
| ->GetState()); |
| - base::scoped_nsobject<GenericChromeCommand> command( |
| - [[GenericChromeCommand alloc] initWithTag:IDC_SHOW_ADD_ACCOUNT]); |
| + GenericChromeCommand* command = |
| + [[GenericChromeCommand alloc] initWithTag:IDC_SHOW_ADD_ACCOUNT]; |
| [self.view chromeExecuteCommand:command]; |
| } |
| @@ -1899,17 +1821,17 @@ void TabInfoBarObserver::OnInfoBarReplaced(infobars::InfoBar* old_infobar, |
| [self goBack]; |
| if (url.is_valid()) { |
| - base::scoped_nsobject<OpenUrlCommand> command([[OpenUrlCommand alloc] |
| + OpenUrlCommand* command = [[OpenUrlCommand alloc] |
| initWithURL:url |
| referrer:web::Referrer() // Strip referrer when switching modes. |
| inIncognito:YES |
| inBackground:NO |
| - appendTo:kLastTab]); |
| + appendTo:kLastTab]; |
| [self.view chromeExecuteCommand:command]; |
| } else { |
| - base::scoped_nsobject<GenericChromeCommand> chromeCommand( |
| - [[GenericChromeCommand alloc] initWithTag:IDC_NEW_INCOGNITO_TAB]); |
| - [self.view chromeExecuteCommand:chromeCommand]; |
| + GenericChromeCommand* command = |
| + [[GenericChromeCommand alloc] initWithTag:IDC_NEW_INCOGNITO_TAB]; |
| + [self.view chromeExecuteCommand:command]; |
| } |
| } |
| @@ -1921,19 +1843,11 @@ void TabInfoBarObserver::OnInfoBarReplaced(infobars::InfoBar* old_infobar, |
| if (browserState_->IsOffTheRecord()) |
| return; |
| DCHECK(!nativeAppNavigationController_); |
| - nativeAppNavigationController_.reset( |
| - [[NativeAppNavigationController alloc] initWithWebState:self.webState]); |
| + nativeAppNavigationController_ = |
| + [[NativeAppNavigationController alloc] initWithWebState:self.webState]; |
| DCHECK(nativeAppNavigationController_); |
| } |
| -- (id<PassKitDialogProvider>)passKitDialogProvider { |
| - return passKitDialogProvider_.get(); |
| -} |
| - |
| -- (void)setPassKitDialogProvider:(id<PassKitDialogProvider>)provider { |
| - passKitDialogProvider_.reset(provider); |
| -} |
| - |
| - (void)wasShown { |
| visible_ = YES; |
| [self updateFullscreenWithToolbarVisible:YES]; |
| @@ -1962,7 +1876,7 @@ void TabInfoBarObserver::OnInfoBarReplaced(infobars::InfoBar* old_infobar, |
| @implementation Tab (TestingSupport) |
| - (void)replaceExternalAppLauncher:(id)externalAppLauncher { |
| - externalAppLauncher_.reset([externalAppLauncher retain]); |
| + externalAppLauncher_ = externalAppLauncher; |
| } |
| - (TabModel*)parentTabModel { |
| @@ -1970,7 +1884,7 @@ void TabInfoBarObserver::OnInfoBarReplaced(infobars::InfoBar* old_infobar, |
| } |
| - (FormInputAccessoryViewController*)inputAccessoryViewController { |
| - return inputAccessoryViewController_.get(); |
| + return inputAccessoryViewController_; |
| } |
| @end |