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

Side by Side Diff: ios/chrome/browser/tabs/tab.mm

Issue 2685653002: Remove TabModel -replaceWebState: method. (Closed)
Patch Set: Fix indentation in the initializer. Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « ios/chrome/browser/tabs/tab.h ('k') | ios/chrome/browser/tabs/tab_model_unittest.mm » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 The Chromium Authors. All rights reserved. 1 // Copyright 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #import "ios/chrome/browser/tabs/tab.h" 5 #import "ios/chrome/browser/tabs/tab.h"
6 6
7 #import <CoreLocation/CoreLocation.h> 7 #import <CoreLocation/CoreLocation.h>
8 #import <UIKit/UIKit.h> 8 #import <UIKit/UIKit.h>
9 9
10 #include <utility> 10 #include <utility>
(...skipping 496 matching lines...) Expand 10 before | Expand all | Expand 10 after
507 std::unique_ptr<web::WebStateImpl> webState( 507 std::unique_ptr<web::WebStateImpl> webState(
508 new web::WebStateImpl(browserState)); 508 new web::WebStateImpl(browserState));
509 webState->GetNavigationManagerImpl().InitializeSession( 509 webState->GetNavigationManagerImpl().InitializeSession(
510 windowName, opener.tabId, openedByDOM, openerIndex); 510 windowName, opener.tabId, openedByDOM, openerIndex);
511 511
512 return [self initWithWebState:std::move(webState) model:parentModel]; 512 return [self initWithWebState:std::move(webState) model:parentModel];
513 } 513 }
514 514
515 - (instancetype)initWithWebState:(std::unique_ptr<web::WebState>)webState 515 - (instancetype)initWithWebState:(std::unique_ptr<web::WebState>)webState
516 model:(TabModel*)parentModel { 516 model:(TabModel*)parentModel {
517 return [self initWithWebState:std::move(webState)
518 model:parentModel
519 attachTabHelpers:YES];
520 }
521
522 - (instancetype)initWithWebState:(std::unique_ptr<web::WebState>)webState
523 model:(TabModel*)parentModel
524 attachTabHelpers:(BOOL)attachTabHelpers {
517 DCHECK(webState); 525 DCHECK(webState);
518 self = [super init]; 526 self = [super init];
519 if (self) { 527 if (self) {
520 propertyReleaser_Tab_.Init(self, [Tab class]); 528 propertyReleaser_Tab_.Init(self, [Tab class]);
521 tabHistoryContext_.reset(new TabHistoryContext()); 529 tabHistoryContext_.reset(new TabHistoryContext());
522 parentTabModel_ = parentModel; 530 parentTabModel_ = parentModel;
523 browserState_ = 531 browserState_ =
524 ios::ChromeBrowserState::FromBrowserState(webState->GetBrowserState()); 532 ios::ChromeBrowserState::FromBrowserState(webState->GetBrowserState());
525 533
526 webStateImpl_.reset(static_cast<web::WebStateImpl*>(webState.release())); 534 webStateImpl_.reset(static_cast<web::WebStateImpl*>(webState.release()));
527 webStateObserver_.reset( 535 webStateObserver_.reset(
528 new web::WebStateObserverBridge(webStateImpl_.get(), self)); 536 new web::WebStateObserverBridge(webStateImpl_.get(), self));
529 537
530 [self.webController setDelegate:self]; 538 [self.webController setDelegate:self];
531 539
532 NSString* sessionID = self.tabId; 540 NSString* sessionID = self.tabId;
533 DCHECK(sessionID); 541 DCHECK(sessionID);
534 snapshotManager_.reset([[SnapshotManager alloc] init]); 542 snapshotManager_.reset([[SnapshotManager alloc] init]);
535 543
536 webControllerSnapshotHelper_.reset([[WebControllerSnapshotHelper alloc] 544 webControllerSnapshotHelper_.reset([[WebControllerSnapshotHelper alloc]
537 initWithSnapshotManager:snapshotManager_ 545 initWithSnapshotManager:snapshotManager_
538 tab:self]); 546 tab:self]);
539 547
540 findInPageController_.reset([[FindInPageController alloc] 548 findInPageController_.reset([[FindInPageController alloc]
541 initWithWebState:self.webState 549 initWithWebState:self.webState
542 delegate:self]); 550 delegate:self]);
543 551
544 [self initNativeAppNavigationController]; 552 [self initNativeAppNavigationController];
545 // IOSChromeSessionTabHelper comes first because it sets up the tab ID, and
546 // other helpers may rely on that.
547 IOSChromeSessionTabHelper::CreateForWebState(self.webState);
548 553
549 NetworkActivityIndicatorTabHelper::CreateForWebState(self.webState, 554 if (attachTabHelpers) {
550 self.tabId); 555 // IOSChromeSessionTabHelper comes first because it sets up the tab ID,
551 IOSChromeSyncedTabDelegate::CreateForWebState(self.webState); 556 // and other helpers may rely on that.
552 InfoBarManagerImpl::CreateForWebState(self.webState); 557 IOSChromeSessionTabHelper::CreateForWebState(self.webState);
553 IOSSecurityStateTabHelper::CreateForWebState(self.webState);
554 RepostFormTabHelper::CreateForWebState(self.webState);
555 BlockedPopupTabHelper::CreateForWebState(self.webState);
556 558
557 if (reading_list::switches::IsReadingListEnabled()) { 559 NetworkActivityIndicatorTabHelper::CreateForWebState(self.webState,
558 ReadingListModel* model = 560 self.tabId);
559 ReadingListModelFactory::GetForBrowserState(browserState_); 561 IOSChromeSyncedTabDelegate::CreateForWebState(self.webState);
560 ReadingListWebStateObserver::FromWebState(self.webState, model); 562 InfoBarManagerImpl::CreateForWebState(self.webState);
563 IOSSecurityStateTabHelper::CreateForWebState(self.webState);
564 RepostFormTabHelper::CreateForWebState(self.webState);
565 BlockedPopupTabHelper::CreateForWebState(self.webState);
566
567 if (reading_list::switches::IsReadingListEnabled()) {
568 ReadingListModel* model =
569 ReadingListModelFactory::GetForBrowserState(browserState_);
570 ReadingListWebStateObserver::FromWebState(self.webState, model);
571 }
572
573 tabInfoBarObserver_.reset(new TabInfoBarObserver(self));
574 tabInfoBarObserver_->SetShouldObserveInfoBarManager(true);
575
576 if (AccountConsistencyService* account_consistency_service =
577 ios::AccountConsistencyServiceFactory::GetForBrowserState(
578 browserState_)) {
579 account_consistency_service->SetWebStateHandler(self.webState, self);
580 }
581 ChromeIOSTranslateClient::CreateForWebState(self.webState);
582 if (experimental_flags::IsAutoReloadEnabled()) {
583 autoReloadBridge_.reset([[AutoReloadBridge alloc] initWithTab:self]);
584 }
585 printObserver_.reset(new PrintObserver(self.webState));
586
587 base::scoped_nsprotocol<id<PasswordsUiDelegate>> passwordsUiDelegate(
588 [[PasswordsUiDelegateImpl alloc] init]);
589 passwordController_.reset([[PasswordController alloc]
590 initWithWebState:self.webState
591 passwordsUiDelegate:passwordsUiDelegate]);
592 password_manager::PasswordGenerationManager* passwordGenerationManager =
593 [passwordController_ passwordGenerationManager];
594 autofillController_.reset([[AutofillController alloc]
595 initWithBrowserState:browserState_
596 passwordGenerationManager:passwordGenerationManager
597 webState:self.webState]);
598 suggestionController_.reset([[FormSuggestionController alloc]
599 initWithWebState:self.webState
600 providers:[self suggestionProviders]]);
601 inputAccessoryViewController_.reset(
602 [[FormInputAccessoryViewController alloc]
603 initWithWebState:self.webState
604 providers:[self accessoryViewProviders]]);
605
606 ios::ChromeBrowserState* original_browser_state =
607 ios::ChromeBrowserState::FromBrowserState(
608 self.webState->GetBrowserState())
609 ->GetOriginalChromeBrowserState();
610 favicon::WebFaviconDriver::CreateForWebState(
611 self.webState,
612 ios::FaviconServiceFactory::GetForBrowserState(
613 original_browser_state, ServiceAccessType::IMPLICIT_ACCESS),
614 ios::HistoryServiceFactory::GetForBrowserState(
615 original_browser_state, ServiceAccessType::IMPLICIT_ACCESS),
616 ios::BookmarkModelFactory::GetForBrowserState(
617 original_browser_state));
618 history::WebStateTopSitesObserver::CreateForWebState(
619 self.webState,
620 ios::TopSitesFactory::GetForBrowserState(original_browser_state)
621 .get());
622 [self setShouldObserveFaviconChanges:YES];
623
624 if (parentModel && parentModel.syncedWindowDelegate) {
625 IOSChromeSessionTabHelper::FromWebState(self.webState)
626 ->SetWindowID(parentModel.sessionID);
627 }
628
629 // Create the ReaderModeController immediately so it can register for
630 // WebState changes.
631 if (experimental_flags::IsReaderModeEnabled()) {
632 readerModeController_.reset([[ReaderModeController alloc]
633 initWithWebState:self.webState
634 delegate:self]);
635 }
636
637 // Allow the embedder to attach tab helpers.
638 ios::GetChromeBrowserProvider()->AttachTabHelpers(self.webState, self);
561 } 639 }
562 640
563 tabInfoBarObserver_.reset(new TabInfoBarObserver(self));
564 tabInfoBarObserver_->SetShouldObserveInfoBarManager(true);
565
566 if (AccountConsistencyService* account_consistency_service =
567 ios::AccountConsistencyServiceFactory::GetForBrowserState(
568 browserState_)) {
569 account_consistency_service->SetWebStateHandler(self.webState, self);
570 }
571 ChromeIOSTranslateClient::CreateForWebState(self.webState);
572 if (experimental_flags::IsAutoReloadEnabled()) {
573 autoReloadBridge_.reset([[AutoReloadBridge alloc] initWithTab:self]);
574 }
575 printObserver_.reset(new PrintObserver(self.webState));
576
577 base::scoped_nsprotocol<id<PasswordsUiDelegate>> passwordsUiDelegate(
578 [[PasswordsUiDelegateImpl alloc] init]);
579 passwordController_.reset([[PasswordController alloc]
580 initWithWebState:self.webState
581 passwordsUiDelegate:passwordsUiDelegate]);
582 password_manager::PasswordGenerationManager* passwordGenerationManager =
583 [passwordController_ passwordGenerationManager];
584 autofillController_.reset([[AutofillController alloc]
585 initWithBrowserState:browserState_
586 passwordGenerationManager:passwordGenerationManager
587 webState:self.webState]);
588 suggestionController_.reset([[FormSuggestionController alloc]
589 initWithWebState:self.webState
590 providers:[self suggestionProviders]]);
591 inputAccessoryViewController_.reset(
592 [[FormInputAccessoryViewController alloc]
593 initWithWebState:self.webState
594 providers:[self accessoryViewProviders]]);
595
596 ios::ChromeBrowserState* original_browser_state =
597 ios::ChromeBrowserState::FromBrowserState(
598 self.webState->GetBrowserState())
599 ->GetOriginalChromeBrowserState();
600 favicon::WebFaviconDriver::CreateForWebState(
601 self.webState,
602 ios::FaviconServiceFactory::GetForBrowserState(
603 original_browser_state, ServiceAccessType::IMPLICIT_ACCESS),
604 ios::HistoryServiceFactory::GetForBrowserState(
605 original_browser_state, ServiceAccessType::IMPLICIT_ACCESS),
606 ios::BookmarkModelFactory::GetForBrowserState(original_browser_state));
607 history::WebStateTopSitesObserver::CreateForWebState(
608 self.webState,
609 ios::TopSitesFactory::GetForBrowserState(original_browser_state).get());
610 [self setShouldObserveFaviconChanges:YES];
611
612 if (parentModel && parentModel.syncedWindowDelegate) {
613 IOSChromeSessionTabHelper::FromWebState(self.webState)
614 ->SetWindowID(parentModel.sessionID);
615 }
616
617 // Create the ReaderModeController immediately so it can register for
618 // WebState changes.
619 if (experimental_flags::IsReaderModeEnabled()) {
620 readerModeController_.reset([[ReaderModeController alloc]
621 initWithWebState:self.webState
622 delegate:self]);
623 }
624
625 // Allow the embedder to attach tab helpers.
626 ios::GetChromeBrowserProvider()->AttachTabHelpers(self.webState, self);
627
628 [[NSNotificationCenter defaultCenter] 641 [[NSNotificationCenter defaultCenter]
629 addObserver:self 642 addObserver:self
630 selector:@selector(applicationDidBecomeActive) 643 selector:@selector(applicationDidBecomeActive)
631 name:UIApplicationDidBecomeActiveNotification 644 name:UIApplicationDidBecomeActiveNotification
632 object:nil]; 645 object:nil];
633 } 646 }
634 return self; 647 return self;
635 } 648 }
636 649
637 - (instancetype)init { 650 - (instancetype)init {
(...skipping 1584 matching lines...) Expand 10 before | Expand all | Expand 10 after
2222 return (fromIndex != NSNotFound && toIndex != NSNotFound && 2235 return (fromIndex != NSNotFound && toIndex != NSNotFound &&
2223 fromIndex > toIndex); 2236 fromIndex > toIndex);
2224 } 2237 }
2225 2238
2226 @end 2239 @end
2227 2240
2228 #pragma mark - TestingSupport 2241 #pragma mark - TestingSupport
2229 2242
2230 @implementation Tab (TestingSupport) 2243 @implementation Tab (TestingSupport)
2231 2244
2232 - (void)replaceWebState:(std::unique_ptr<web::WebStateImpl>)webState {
2233 // Stop observing the old InfoBarManager and FaviconDriver since they will
2234 // be deleted with the old web controller.
2235 [self setShouldObserveInfoBarManager:NO];
2236 [self setShouldObserveFaviconChanges:NO];
2237 [self.webController setDelegate:nil];
2238 // Set the new web state.
2239 webStateImpl_ = std::move(webState);
2240 [self.webController setDelegate:self];
2241 webStateObserver_.reset(
2242 new web::WebStateObserverBridge(webStateImpl_.get(), self));
2243 // SessionTabHelper comes first because it sets up the tab ID, and other
2244 // helpers may rely on that.
2245 IOSChromeSessionTabHelper::CreateForWebState(webStateImpl_.get());
2246 IOSChromeSyncedTabDelegate::CreateForWebState(webStateImpl_.get());
2247 // Start observing the new web controller's InfoBarManager and FaviconDriver.
2248 [self setShouldObserveInfoBarManager:YES];
2249 [self setShouldObserveFaviconChanges:YES];
2250 findInPageController_.reset();
2251 }
2252
2253 - (void)replaceExternalAppLauncher:(id)externalAppLauncher { 2245 - (void)replaceExternalAppLauncher:(id)externalAppLauncher {
2254 externalAppLauncher_.reset([externalAppLauncher retain]); 2246 externalAppLauncher_.reset([externalAppLauncher retain]);
2255 } 2247 }
2256 2248
2257 - (TabModel*)parentTabModel { 2249 - (TabModel*)parentTabModel {
2258 return parentTabModel_; 2250 return parentTabModel_;
2259 } 2251 }
2260 2252
2261 - (FormInputAccessoryViewController*)inputAccessoryViewController { 2253 - (FormInputAccessoryViewController*)inputAccessoryViewController {
2262 return inputAccessoryViewController_.get(); 2254 return inputAccessoryViewController_.get();
2263 } 2255 }
2264 2256
2265 @end 2257 @end
OLDNEW
« no previous file with comments | « ios/chrome/browser/tabs/tab.h ('k') | ios/chrome/browser/tabs/tab_model_unittest.mm » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698