Chromium Code Reviews| Index: ios/chrome/browser/passwords/password_controller.mm |
| diff --git a/ios/chrome/browser/passwords/password_controller.mm b/ios/chrome/browser/passwords/password_controller.mm |
| index 98369d96a1b0ebb2a5bf015d6c54d2018760e0c7..ddc95ef12717ecfcc28e145caef5bf477aa84313 100644 |
| --- a/ios/chrome/browser/passwords/password_controller.mm |
| +++ b/ios/chrome/browser/passwords/password_controller.mm |
| @@ -234,6 +234,7 @@ bool GetPageURLAndCheckTrustLevel(web::WebState* web_state, GURL* page_url) { |
| base::scoped_nsobject<PasswordGenerationAgent> passwordGenerationAgent_; |
| JsPasswordManager* passwordJsManager_; // weak |
| + web::WebState* webState_; // weak |
| // The pending form data. |
| std::unique_ptr<autofill::PasswordFormFillData> formData_; |
| @@ -242,6 +243,8 @@ bool GetPageURLAndCheckTrustLevel(web::WebState* web_state, GURL* page_url) { |
| std::unique_ptr<web::WebStateObserverBridge> webStateObserverBridge_; |
| } |
| +@synthesize isBeingDestroyed = isBeingDestroyed_; |
|
Eugene But (OOO till 7-30)
2016/05/03 17:49:49
Sorry the name I suggested was not very good. isWe
vabr (Chromium)
2016/05/04 15:03:46
Done.
|
| + |
| - (instancetype)initWithWebState:(web::WebState*)webState |
| passwordsUiDelegate:(id<PasswordsUiDelegate>)UIDelegate { |
| self = [self initWithWebState:webState |
| @@ -257,8 +260,8 @@ bool GetPageURLAndCheckTrustLevel(web::WebState* web_state, GURL* page_url) { |
| DCHECK(webState); |
| self = [super init]; |
| if (self) { |
| - webStateObserverBridge_.reset( |
| - new web::WebStateObserverBridge(webState, self)); |
| + isBeingDestroyed_ = NO; |
|
Eugene But (OOO till 7-30)
2016/05/03 17:49:49
From Objective-C Style Guide:
Don't initialize in
vabr (Chromium)
2016/05/04 15:03:46
Done.
|
| + webState_ = webState; |
|
Eugene But (OOO till 7-30)
2016/05/03 17:49:49
This change is not part of the bugfix and because
vabr (Chromium)
2016/05/04 15:03:46
Done.
|
| if (passwordManagerClient) |
| passwordManagerClient_ = std::move(passwordManagerClient); |
| else |
| @@ -279,6 +282,8 @@ bool GetPageURLAndCheckTrustLevel(web::WebState* web_state, GURL* page_url) { |
| passwordJsManager_ = base::mac::ObjCCastStrict<JsPasswordManager>( |
| [webState->GetJSInjectionReceiver() |
| instanceOfClass:[JsPasswordManager class]]); |
| + webStateObserverBridge_.reset( |
|
Eugene But (OOO till 7-30)
2016/05/03 17:49:49
This also not a part of the fix, so please exclude
vabr (Chromium)
2016/05/04 15:03:46
Done.
|
| + new web::WebStateObserverBridge(webState, self)); |
| } |
| return self; |
| } |
| @@ -294,10 +299,9 @@ bool GetPageURLAndCheckTrustLevel(web::WebState* web_state, GURL* page_url) { |
| } |
| - (ios::ChromeBrowserState*)browserState { |
| - return webStateObserverBridge_ && webStateObserverBridge_->web_state() |
| - ? ios::ChromeBrowserState::FromBrowserState( |
| - webStateObserverBridge_->web_state()->GetBrowserState()) |
| - : nullptr; |
| + return webState_ ? ios::ChromeBrowserState::FromBrowserState( |
| + webState_->GetBrowserState()) |
| + : nullptr; |
| } |
| - (const GURL&)lastCommittedURL { |
| @@ -307,6 +311,7 @@ bool GetPageURLAndCheckTrustLevel(web::WebState* web_state, GURL* page_url) { |
| } |
| - (void)detach { |
| + webState_ = nullptr; |
| webStateObserverBridge_.reset(); |
| passwordGenerationAgent_.reset(); |
| passwordGenerationManager_.reset(); |
| @@ -383,7 +388,7 @@ bool GetPageURLAndCheckTrustLevel(web::WebState* web_state, GURL* page_url) { |
| // the race. |
| // TODO(crbug.com/418827): Fix this by passing in more data from the JS side. |
| id completionHandler = ^(BOOL found, const autofill::PasswordForm& form) { |
| - if (weakSelf) { |
| + if (weakSelf && [weakSelf isBeingDestroyed] == NO) { |
|
Eugene But (OOO till 7-30)
2016/05/03 17:49:49
NIT: ![weakSelf isBeingDestroyed]
vabr (Chromium)
2016/05/04 15:03:46
Done.
|
| weakSelf.get()->passwordManager_->OnPasswordFormSubmitted( |
| weakSelf.get()->passwordManagerDriver_.get(), form); |
| } |
| @@ -393,6 +398,7 @@ bool GetPageURLAndCheckTrustLevel(web::WebState* web_state, GURL* page_url) { |
| } |
| - (void)webStateDestroyed:(web::WebState*)webState { |
| + isBeingDestroyed_ = YES; |
| [self detach]; |
| } |