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

Side by Side Diff: chrome/browser/ui/passwords/manage_passwords_ui_controller.cc

Issue 441643007: ManagePasswordsUIController should make a deep copy of values which it doesn't own. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: comments Created 6 years, 4 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 | Annotate | Revision Log
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 #include "chrome/browser/ui/passwords/manage_passwords_ui_controller.h" 5 #include "chrome/browser/ui/passwords/manage_passwords_ui_controller.h"
6 6
7 #include "chrome/app/chrome_command_ids.h" 7 #include "chrome/app/chrome_command_ids.h"
8 #include "chrome/browser/browsing_data/browsing_data_helper.h" 8 #include "chrome/browser/browsing_data/browsing_data_helper.h"
9 #include "chrome/browser/chrome_notification_types.h" 9 #include "chrome/browser/chrome_notification_types.h"
10 #include "chrome/browser/password_manager/password_store_factory.h" 10 #include "chrome/browser/password_manager/password_store_factory.h"
(...skipping 19 matching lines...) Expand all
30 Profile::EXPLICIT_ACCESS).get(); 30 Profile::EXPLICIT_ACCESS).get();
31 } 31 }
32 32
33 autofill::ConstPasswordFormMap ConstifyMap( 33 autofill::ConstPasswordFormMap ConstifyMap(
34 const autofill::PasswordFormMap& map) { 34 const autofill::PasswordFormMap& map) {
35 autofill::ConstPasswordFormMap ret; 35 autofill::ConstPasswordFormMap ret;
36 ret.insert(map.begin(), map.end()); 36 ret.insert(map.begin(), map.end());
37 return ret; 37 return ret;
38 } 38 }
39 39
40 } // namespace 40 // Performs a deep copy of the PasswordForm pointers in |map|. The resulting map
41 // is returned via |ret|. |deleter| is populated with these new objects.
42 void DeepCopyMap(const autofill::PasswordFormMap& map,
43 autofill::ConstPasswordFormMap* ret,
44 ScopedVector<autofill::PasswordForm>* deleter) {
45 ConstifyMap(map).swap(*ret);
46 deleter->clear();
47 for (autofill::ConstPasswordFormMap::iterator i = ret->begin();
48 i != ret->end(); ++i) {
49 deleter->push_back(new autofill::PasswordForm(*i->second));
50 i->second = deleter->back();
51 }
52 }
53
54 } // namespace
41 55
42 DEFINE_WEB_CONTENTS_USER_DATA_KEY(ManagePasswordsUIController); 56 DEFINE_WEB_CONTENTS_USER_DATA_KEY(ManagePasswordsUIController);
43 57
44 ManagePasswordsUIController::ManagePasswordsUIController( 58 ManagePasswordsUIController::ManagePasswordsUIController(
45 content::WebContents* web_contents) 59 content::WebContents* web_contents)
46 : content::WebContentsObserver(web_contents), 60 : content::WebContentsObserver(web_contents),
47 state_(password_manager::ui::INACTIVE_STATE) { 61 state_(password_manager::ui::INACTIVE_STATE) {
48 password_manager::PasswordStore* password_store = 62 password_manager::PasswordStore* password_store =
49 GetPasswordStore(web_contents); 63 GetPasswordStore(web_contents);
50 if (password_store) 64 if (password_store)
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
86 password_form_map_ = ConstifyMap(form_manager_->best_matches()); 100 password_form_map_ = ConstifyMap(form_manager_->best_matches());
87 password_form_map_[form_manager_->associated_username()] = 101 password_form_map_[form_manager_->associated_username()] =
88 &form_manager_->pending_credentials(); 102 &form_manager_->pending_credentials();
89 origin_ = form_manager_->pending_credentials().origin; 103 origin_ = form_manager_->pending_credentials().origin;
90 state_ = password_manager::ui::CONFIRMATION_STATE; 104 state_ = password_manager::ui::CONFIRMATION_STATE;
91 UpdateBubbleAndIconVisibility(); 105 UpdateBubbleAndIconVisibility();
92 } 106 }
93 107
94 void ManagePasswordsUIController::OnPasswordAutofilled( 108 void ManagePasswordsUIController::OnPasswordAutofilled(
95 const PasswordFormMap& password_form_map) { 109 const PasswordFormMap& password_form_map) {
96 password_form_map_ = ConstifyMap(password_form_map); 110 DeepCopyMap(password_form_map, &password_form_map_, &new_password_forms_);
97 origin_ = password_form_map_.begin()->second->origin; 111 origin_ = password_form_map_.begin()->second->origin;
98 state_ = password_manager::ui::MANAGE_STATE; 112 state_ = password_manager::ui::MANAGE_STATE;
99 UpdateBubbleAndIconVisibility(); 113 UpdateBubbleAndIconVisibility();
100 } 114 }
101 115
102 void ManagePasswordsUIController::OnBlacklistBlockedAutofill( 116 void ManagePasswordsUIController::OnBlacklistBlockedAutofill(
103 const PasswordFormMap& password_form_map) { 117 const PasswordFormMap& password_form_map) {
104 password_form_map_ = ConstifyMap(password_form_map); 118 DeepCopyMap(password_form_map, &password_form_map_, &new_password_forms_);
105 origin_ = password_form_map_.begin()->second->origin; 119 origin_ = password_form_map_.begin()->second->origin;
106 state_ = password_manager::ui::BLACKLIST_STATE; 120 state_ = password_manager::ui::BLACKLIST_STATE;
107 UpdateBubbleAndIconVisibility(); 121 UpdateBubbleAndIconVisibility();
108 } 122 }
109 123
110 void ManagePasswordsUIController::WebContentsDestroyed() { 124 void ManagePasswordsUIController::WebContentsDestroyed() {
111 password_manager::PasswordStore* password_store = 125 password_manager::PasswordStore* password_store =
112 GetPasswordStore(web_contents()); 126 GetPasswordStore(web_contents());
113 if (password_store) 127 if (password_store)
114 password_store->RemoveObserver(this); 128 password_store->RemoveObserver(this);
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after
257 return; 271 return;
258 CommandUpdater* updater = browser->command_controller()->command_updater(); 272 CommandUpdater* updater = browser->command_controller()->command_updater();
259 updater->ExecuteCommand(IDC_MANAGE_PASSWORDS_FOR_PAGE); 273 updater->ExecuteCommand(IDC_MANAGE_PASSWORDS_FOR_PAGE);
260 #endif 274 #endif
261 } 275 }
262 276
263 bool ManagePasswordsUIController::PasswordPendingUserDecision() const { 277 bool ManagePasswordsUIController::PasswordPendingUserDecision() const {
264 return state_ == password_manager::ui::PENDING_PASSWORD_STATE || 278 return state_ == password_manager::ui::PENDING_PASSWORD_STATE ||
265 state_ == password_manager::ui::PENDING_PASSWORD_AND_BUBBLE_STATE; 279 state_ == password_manager::ui::PENDING_PASSWORD_AND_BUBBLE_STATE;
266 } 280 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698