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

Side by Side Diff: chrome/browser/ui/website_settings/website_settings_unittest.cc

Issue 10829452: Auto select the connection tab of the Website Settings UI in case of an https error or mixed content (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: " Created 8 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 (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 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 #include "chrome/browser/ui/website_settings/website_settings.h" 5 #include "chrome/browser/ui/website_settings/website_settings.h"
6 6
7 #include "base/at_exit.h" 7 #include "base/at_exit.h"
8 #include "base/message_loop.h" 8 #include "base/message_loop.h"
9 #include "base/string16.h" 9 #include "base/string16.h"
10 #include "base/utf_string_conversions.h" 10 #include "base/utf_string_conversions.h"
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
58 }; 58 };
59 59
60 class MockWebsiteSettingsUI : public WebsiteSettingsUI { 60 class MockWebsiteSettingsUI : public WebsiteSettingsUI {
61 public: 61 public:
62 virtual ~MockWebsiteSettingsUI() {} 62 virtual ~MockWebsiteSettingsUI() {}
63 MOCK_METHOD1(SetCookieInfo, void(const CookieInfoList& cookie_info_list)); 63 MOCK_METHOD1(SetCookieInfo, void(const CookieInfoList& cookie_info_list));
64 MOCK_METHOD1(SetPermissionInfo, 64 MOCK_METHOD1(SetPermissionInfo,
65 void(const PermissionInfoList& permission_info_list)); 65 void(const PermissionInfoList& permission_info_list));
66 MOCK_METHOD1(SetIdentityInfo, void(const IdentityInfo& identity_info)); 66 MOCK_METHOD1(SetIdentityInfo, void(const IdentityInfo& identity_info));
67 MOCK_METHOD1(SetFirstVisit, void(const string16& first_visit)); 67 MOCK_METHOD1(SetFirstVisit, void(const string16& first_visit));
68 MOCK_METHOD1(SetSelectedTab, void(TabId tab_id));
68 }; 69 };
69 70
70 class WebsiteSettingsTest : public ChromeRenderViewHostTestHarness { 71 class WebsiteSettingsTest : public ChromeRenderViewHostTestHarness {
71 public: 72 public:
72 WebsiteSettingsTest() 73 WebsiteSettingsTest()
73 : website_settings_(NULL), 74 : website_settings_(NULL),
74 mock_ui_(NULL), 75 mock_ui_(NULL),
75 cert_id_(0), 76 cert_id_(0),
76 browser_thread_(content::BrowserThread::UI, &message_loop_), 77 browser_thread_(content::BrowserThread::UI, &message_loop_),
77 tab_specific_content_settings_(NULL), 78 tab_specific_content_settings_(NULL),
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
171 url(), url(), CONTENT_SETTINGS_TYPE_PLUGINS, ""); 172 url(), url(), CONTENT_SETTINGS_TYPE_PLUGINS, "");
172 EXPECT_EQ(setting, CONTENT_SETTING_ALLOW); 173 EXPECT_EQ(setting, CONTENT_SETTING_ALLOW);
173 setting = content_settings->GetContentSetting( 174 setting = content_settings->GetContentSetting(
174 url(), url(), CONTENT_SETTINGS_TYPE_GEOLOCATION, ""); 175 url(), url(), CONTENT_SETTINGS_TYPE_GEOLOCATION, "");
175 EXPECT_EQ(setting, CONTENT_SETTING_ASK); 176 EXPECT_EQ(setting, CONTENT_SETTING_ASK);
176 setting = content_settings->GetContentSetting( 177 setting = content_settings->GetContentSetting(
177 url(), url(), CONTENT_SETTINGS_TYPE_NOTIFICATIONS, ""); 178 url(), url(), CONTENT_SETTINGS_TYPE_NOTIFICATIONS, "");
178 EXPECT_EQ(setting, CONTENT_SETTING_ASK); 179 EXPECT_EQ(setting, CONTENT_SETTING_ASK);
179 180
180 SetDefaultUIExpectations(mock_ui()); 181 SetDefaultUIExpectations(mock_ui());
182 EXPECT_CALL(*mock_ui(), SetSelectedTab(
183 WebsiteSettingsUI::TAB_ID_PERMISSIONS));
181 184
182 // Execute code under tests. 185 // Execute code under tests.
183 website_settings()->OnSitePermissionChanged(CONTENT_SETTINGS_TYPE_POPUPS, 186 website_settings()->OnSitePermissionChanged(CONTENT_SETTINGS_TYPE_POPUPS,
184 CONTENT_SETTING_ALLOW); 187 CONTENT_SETTING_ALLOW);
185 website_settings()->OnSitePermissionChanged(CONTENT_SETTINGS_TYPE_PLUGINS, 188 website_settings()->OnSitePermissionChanged(CONTENT_SETTINGS_TYPE_PLUGINS,
186 CONTENT_SETTING_BLOCK); 189 CONTENT_SETTING_BLOCK);
187 website_settings()->OnSitePermissionChanged(CONTENT_SETTINGS_TYPE_GEOLOCATION, 190 website_settings()->OnSitePermissionChanged(CONTENT_SETTINGS_TYPE_GEOLOCATION,
188 CONTENT_SETTING_ALLOW); 191 CONTENT_SETTING_ALLOW);
189 website_settings()->OnSitePermissionChanged( 192 website_settings()->OnSitePermissionChanged(
190 CONTENT_SETTINGS_TYPE_NOTIFICATIONS, CONTENT_SETTING_ALLOW); 193 CONTENT_SETTINGS_TYPE_NOTIFICATIONS, CONTENT_SETTING_ALLOW);
(...skipping 11 matching lines...) Expand all
202 setting = content_settings->GetContentSetting( 205 setting = content_settings->GetContentSetting(
203 url(), url(), CONTENT_SETTINGS_TYPE_NOTIFICATIONS, ""); 206 url(), url(), CONTENT_SETTINGS_TYPE_NOTIFICATIONS, "");
204 EXPECT_EQ(setting, CONTENT_SETTING_ALLOW); 207 EXPECT_EQ(setting, CONTENT_SETTING_ALLOW);
205 } 208 }
206 209
207 TEST_F(WebsiteSettingsTest, OnSiteDataAccessed) { 210 TEST_F(WebsiteSettingsTest, OnSiteDataAccessed) {
208 EXPECT_CALL(*mock_ui(), SetPermissionInfo(_)); 211 EXPECT_CALL(*mock_ui(), SetPermissionInfo(_));
209 EXPECT_CALL(*mock_ui(), SetIdentityInfo(_)); 212 EXPECT_CALL(*mock_ui(), SetIdentityInfo(_));
210 EXPECT_CALL(*mock_ui(), SetFirstVisit(string16())); 213 EXPECT_CALL(*mock_ui(), SetFirstVisit(string16()));
211 EXPECT_CALL(*mock_ui(), SetCookieInfo(_)).Times(2); 214 EXPECT_CALL(*mock_ui(), SetCookieInfo(_)).Times(2);
215 EXPECT_CALL(*mock_ui(), SetSelectedTab(
216 WebsiteSettingsUI::TAB_ID_PERMISSIONS));
212 217
213 website_settings()->OnSiteDataAccessed(); 218 website_settings()->OnSiteDataAccessed();
214 } 219 }
215 220
216 TEST_F(WebsiteSettingsTest, HTTPConnection) { 221 TEST_F(WebsiteSettingsTest, HTTPConnection) {
217 SetDefaultUIExpectations(mock_ui()); 222 SetDefaultUIExpectations(mock_ui());
223 EXPECT_CALL(*mock_ui(), SetSelectedTab(
224 WebsiteSettingsUI::TAB_ID_PERMISSIONS));
218 EXPECT_EQ(WebsiteSettings::SITE_CONNECTION_STATUS_UNENCRYPTED, 225 EXPECT_EQ(WebsiteSettings::SITE_CONNECTION_STATUS_UNENCRYPTED,
219 website_settings()->site_connection_status()); 226 website_settings()->site_connection_status());
220 EXPECT_EQ(WebsiteSettings::SITE_IDENTITY_STATUS_NO_CERT, 227 EXPECT_EQ(WebsiteSettings::SITE_IDENTITY_STATUS_NO_CERT,
221 website_settings()->site_identity_status()); 228 website_settings()->site_identity_status());
222 EXPECT_EQ(string16(), website_settings()->organization_name()); 229 EXPECT_EQ(string16(), website_settings()->organization_name());
223 } 230 }
224 231
225 TEST_F(WebsiteSettingsTest, HTTPSConnection) { 232 TEST_F(WebsiteSettingsTest, HTTPSConnection) {
226 ssl_.security_style = content::SECURITY_STYLE_AUTHENTICATED; 233 ssl_.security_style = content::SECURITY_STYLE_AUTHENTICATED;
227 ssl_.cert_id = cert_id(); 234 ssl_.cert_id = cert_id();
228 ssl_.cert_status = 0; 235 ssl_.cert_status = 0;
229 ssl_.security_bits = 81; // No error if > 80. 236 ssl_.security_bits = 81; // No error if > 80.
230 int status = 0; 237 int status = 0;
231 status = SetSSLVersion(status, net::SSL_CONNECTION_VERSION_TLS1); 238 status = SetSSLVersion(status, net::SSL_CONNECTION_VERSION_TLS1);
232 status = SetSSLCipherSuite(status, CR_TLS_RSA_WITH_AES_256_CBC_SHA256); 239 status = SetSSLCipherSuite(status, CR_TLS_RSA_WITH_AES_256_CBC_SHA256);
233 ssl_.connection_status = status; 240 ssl_.connection_status = status;
234 241
235 SetDefaultUIExpectations(mock_ui()); 242 SetDefaultUIExpectations(mock_ui());
243 EXPECT_CALL(*mock_ui(), SetSelectedTab(
244 WebsiteSettingsUI::TAB_ID_PERMISSIONS));
236 245
237 EXPECT_EQ(WebsiteSettings::SITE_CONNECTION_STATUS_ENCRYPTED, 246 EXPECT_EQ(WebsiteSettings::SITE_CONNECTION_STATUS_ENCRYPTED,
238 website_settings()->site_connection_status()); 247 website_settings()->site_connection_status());
239 EXPECT_EQ(WebsiteSettings::SITE_IDENTITY_STATUS_CERT, 248 EXPECT_EQ(WebsiteSettings::SITE_IDENTITY_STATUS_CERT,
240 website_settings()->site_identity_status()); 249 website_settings()->site_identity_status());
241 EXPECT_EQ(string16(), website_settings()->organization_name()); 250 EXPECT_EQ(string16(), website_settings()->organization_name());
242 } 251 }
243 252
244 TEST_F(WebsiteSettingsTest, HTTPSMixedContent) { 253 TEST_F(WebsiteSettingsTest, HTTPSMixedContent) {
245 ssl_.security_style = content::SECURITY_STYLE_AUTHENTICATED; 254 ssl_.security_style = content::SECURITY_STYLE_AUTHENTICATED;
246 ssl_.cert_id = cert_id(); 255 ssl_.cert_id = cert_id();
247 ssl_.cert_status = 0; 256 ssl_.cert_status = 0;
248 ssl_.security_bits = 81; // No error if > 80. 257 ssl_.security_bits = 81; // No error if > 80.
249 ssl_.content_status = SSLStatus::DISPLAYED_INSECURE_CONTENT; 258 ssl_.content_status = SSLStatus::DISPLAYED_INSECURE_CONTENT;
250 int status = 0; 259 int status = 0;
251 status = SetSSLVersion(status, net::SSL_CONNECTION_VERSION_TLS1); 260 status = SetSSLVersion(status, net::SSL_CONNECTION_VERSION_TLS1);
252 status = SetSSLCipherSuite(status, CR_TLS_RSA_WITH_AES_256_CBC_SHA256); 261 status = SetSSLCipherSuite(status, CR_TLS_RSA_WITH_AES_256_CBC_SHA256);
253 ssl_.connection_status = status; 262 ssl_.connection_status = status;
254 263
255 SetDefaultUIExpectations(mock_ui()); 264 SetDefaultUIExpectations(mock_ui());
265 EXPECT_CALL(*mock_ui(), SetSelectedTab(WebsiteSettingsUI::TAB_ID_CONNECTION));
256 266
257 EXPECT_EQ(WebsiteSettings::SITE_CONNECTION_STATUS_MIXED_CONTENT, 267 EXPECT_EQ(WebsiteSettings::SITE_CONNECTION_STATUS_MIXED_CONTENT,
258 website_settings()->site_connection_status()); 268 website_settings()->site_connection_status());
259 EXPECT_EQ(WebsiteSettings::SITE_IDENTITY_STATUS_CERT, 269 EXPECT_EQ(WebsiteSettings::SITE_IDENTITY_STATUS_CERT,
260 website_settings()->site_identity_status()); 270 website_settings()->site_identity_status());
261 EXPECT_EQ(string16(), website_settings()->organization_name()); 271 EXPECT_EQ(string16(), website_settings()->organization_name());
262 } 272 }
263 273
264 TEST_F(WebsiteSettingsTest, HTTPSEVCert) { 274 TEST_F(WebsiteSettingsTest, HTTPSEVCert) {
265 scoped_refptr<net::X509Certificate> ev_cert = 275 scoped_refptr<net::X509Certificate> ev_cert =
266 net::X509Certificate::CreateFromBytes( 276 net::X509Certificate::CreateFromBytes(
267 reinterpret_cast<const char*>(google_der), 277 reinterpret_cast<const char*>(google_der),
268 sizeof(google_der)); 278 sizeof(google_der));
269 int ev_cert_id = 1; 279 int ev_cert_id = 1;
270 EXPECT_CALL(*cert_store(), RetrieveCert(ev_cert_id, _)).WillRepeatedly( 280 EXPECT_CALL(*cert_store(), RetrieveCert(ev_cert_id, _)).WillRepeatedly(
271 DoAll(SetArgPointee<1>(ev_cert), Return(true))); 281 DoAll(SetArgPointee<1>(ev_cert), Return(true)));
272 282
273 ssl_.security_style = content::SECURITY_STYLE_AUTHENTICATED; 283 ssl_.security_style = content::SECURITY_STYLE_AUTHENTICATED;
274 ssl_.cert_id = ev_cert_id; 284 ssl_.cert_id = ev_cert_id;
275 ssl_.cert_status = net::CERT_STATUS_IS_EV; 285 ssl_.cert_status = net::CERT_STATUS_IS_EV;
276 ssl_.security_bits = 81; // No error if > 80. 286 ssl_.security_bits = 81; // No error if > 80.
277 ssl_.content_status = SSLStatus::DISPLAYED_INSECURE_CONTENT; 287 ssl_.content_status = SSLStatus::DISPLAYED_INSECURE_CONTENT;
278 int status = 0; 288 int status = 0;
279 status = SetSSLVersion(status, net::SSL_CONNECTION_VERSION_TLS1); 289 status = SetSSLVersion(status, net::SSL_CONNECTION_VERSION_TLS1);
280 status = SetSSLCipherSuite(status, CR_TLS_RSA_WITH_AES_256_CBC_SHA256); 290 status = SetSSLCipherSuite(status, CR_TLS_RSA_WITH_AES_256_CBC_SHA256);
281 ssl_.connection_status = status; 291 ssl_.connection_status = status;
282 292
283 SetDefaultUIExpectations(mock_ui()); 293 SetDefaultUIExpectations(mock_ui());
294 EXPECT_CALL(*mock_ui(), SetSelectedTab(WebsiteSettingsUI::TAB_ID_CONNECTION));
284 295
285 EXPECT_EQ(WebsiteSettings::SITE_CONNECTION_STATUS_MIXED_CONTENT, 296 EXPECT_EQ(WebsiteSettings::SITE_CONNECTION_STATUS_MIXED_CONTENT,
286 website_settings()->site_connection_status()); 297 website_settings()->site_connection_status());
287 EXPECT_EQ(WebsiteSettings::SITE_IDENTITY_STATUS_EV_CERT, 298 EXPECT_EQ(WebsiteSettings::SITE_IDENTITY_STATUS_EV_CERT,
288 website_settings()->site_identity_status()); 299 website_settings()->site_identity_status());
289 EXPECT_EQ(UTF8ToUTF16("Google Inc"), website_settings()->organization_name()); 300 EXPECT_EQ(UTF8ToUTF16("Google Inc"), website_settings()->organization_name());
290 } 301 }
291 302
292 TEST_F(WebsiteSettingsTest, HTTPSRevocationError) { 303 TEST_F(WebsiteSettingsTest, HTTPSRevocationError) {
293 ssl_.security_style = content::SECURITY_STYLE_AUTHENTICATED; 304 ssl_.security_style = content::SECURITY_STYLE_AUTHENTICATED;
294 ssl_.cert_id = cert_id(); 305 ssl_.cert_id = cert_id();
295 ssl_.cert_status = net::CERT_STATUS_UNABLE_TO_CHECK_REVOCATION; 306 ssl_.cert_status = net::CERT_STATUS_UNABLE_TO_CHECK_REVOCATION;
296 ssl_.security_bits = 81; // No error if > 80. 307 ssl_.security_bits = 81; // No error if > 80.
297 int status = 0; 308 int status = 0;
298 status = SetSSLVersion(status, net::SSL_CONNECTION_VERSION_TLS1); 309 status = SetSSLVersion(status, net::SSL_CONNECTION_VERSION_TLS1);
299 status = SetSSLCipherSuite(status, CR_TLS_RSA_WITH_AES_256_CBC_SHA256); 310 status = SetSSLCipherSuite(status, CR_TLS_RSA_WITH_AES_256_CBC_SHA256);
300 ssl_.connection_status = status; 311 ssl_.connection_status = status;
301 312
302 SetDefaultUIExpectations(mock_ui()); 313 SetDefaultUIExpectations(mock_ui());
314 EXPECT_CALL(*mock_ui(), SetSelectedTab(WebsiteSettingsUI::TAB_ID_CONNECTION));
303 315
304 EXPECT_EQ(WebsiteSettings::SITE_CONNECTION_STATUS_ENCRYPTED, 316 EXPECT_EQ(WebsiteSettings::SITE_CONNECTION_STATUS_ENCRYPTED,
305 website_settings()->site_connection_status()); 317 website_settings()->site_connection_status());
306 EXPECT_EQ(WebsiteSettings::SITE_IDENTITY_STATUS_CERT_REVOCATION_UNKNOWN, 318 EXPECT_EQ(WebsiteSettings::SITE_IDENTITY_STATUS_CERT_REVOCATION_UNKNOWN,
307 website_settings()->site_identity_status()); 319 website_settings()->site_identity_status());
308 EXPECT_EQ(string16(), website_settings()->organization_name()); 320 EXPECT_EQ(string16(), website_settings()->organization_name());
309 } 321 }
310 322
311 TEST_F(WebsiteSettingsTest, HTTPSConnectionError) { 323 TEST_F(WebsiteSettingsTest, HTTPSConnectionError) {
312 ssl_.security_style = content::SECURITY_STYLE_AUTHENTICATED; 324 ssl_.security_style = content::SECURITY_STYLE_AUTHENTICATED;
313 ssl_.cert_id = cert_id(); 325 ssl_.cert_id = cert_id();
314 ssl_.cert_status = 0; 326 ssl_.cert_status = 0;
315 ssl_.security_bits = 1; 327 ssl_.security_bits = 1;
316 int status = 0; 328 int status = 0;
317 status = SetSSLVersion(status, net::SSL_CONNECTION_VERSION_TLS1); 329 status = SetSSLVersion(status, net::SSL_CONNECTION_VERSION_TLS1);
318 status = SetSSLCipherSuite(status, CR_TLS_RSA_WITH_AES_256_CBC_SHA256); 330 status = SetSSLCipherSuite(status, CR_TLS_RSA_WITH_AES_256_CBC_SHA256);
319 ssl_.connection_status = status; 331 ssl_.connection_status = status;
320 332
321 SetDefaultUIExpectations(mock_ui()); 333 SetDefaultUIExpectations(mock_ui());
334 EXPECT_CALL(*mock_ui(), SetSelectedTab(WebsiteSettingsUI::TAB_ID_CONNECTION));
322 335
323 EXPECT_EQ(WebsiteSettings::SITE_CONNECTION_STATUS_ENCRYPTED_ERROR, 336 EXPECT_EQ(WebsiteSettings::SITE_CONNECTION_STATUS_ENCRYPTED_ERROR,
324 website_settings()->site_connection_status()); 337 website_settings()->site_connection_status());
325 EXPECT_EQ(WebsiteSettings::SITE_IDENTITY_STATUS_CERT, 338 EXPECT_EQ(WebsiteSettings::SITE_IDENTITY_STATUS_CERT,
326 website_settings()->site_identity_status()); 339 website_settings()->site_identity_status());
327 EXPECT_EQ(string16(), website_settings()->organization_name()); 340 EXPECT_EQ(string16(), website_settings()->organization_name());
328 } 341 }
329 342
330 TEST_F(WebsiteSettingsTest, NoInfoBar) { 343 TEST_F(WebsiteSettingsTest, NoInfoBar) {
331 SetDefaultUIExpectations(mock_ui()); 344 SetDefaultUIExpectations(mock_ui());
345 EXPECT_CALL(*mock_ui(), SetSelectedTab(
346 WebsiteSettingsUI::TAB_ID_PERMISSIONS));
332 EXPECT_EQ(0u, infobar_tab_helper()->GetInfoBarCount()); 347 EXPECT_EQ(0u, infobar_tab_helper()->GetInfoBarCount());
333 website_settings()->OnUIClosing(); 348 website_settings()->OnUIClosing();
334 EXPECT_EQ(0u, infobar_tab_helper()->GetInfoBarCount()); 349 EXPECT_EQ(0u, infobar_tab_helper()->GetInfoBarCount());
335 } 350 }
336 351
337 TEST_F(WebsiteSettingsTest, ShowInfoBar) { 352 TEST_F(WebsiteSettingsTest, ShowInfoBar) {
338 SetDefaultUIExpectations(mock_ui()); 353 SetDefaultUIExpectations(mock_ui());
354 EXPECT_CALL(*mock_ui(), SetSelectedTab(
355 WebsiteSettingsUI::TAB_ID_PERMISSIONS));
339 EXPECT_EQ(0u, infobar_tab_helper()->GetInfoBarCount()); 356 EXPECT_EQ(0u, infobar_tab_helper()->GetInfoBarCount());
340 website_settings()->OnSitePermissionChanged( 357 website_settings()->OnSitePermissionChanged(
341 CONTENT_SETTINGS_TYPE_GEOLOCATION, CONTENT_SETTING_ALLOW); 358 CONTENT_SETTINGS_TYPE_GEOLOCATION, CONTENT_SETTING_ALLOW);
342 website_settings()->OnUIClosing(); 359 website_settings()->OnUIClosing();
343 EXPECT_EQ(1u, infobar_tab_helper()->GetInfoBarCount()); 360 EXPECT_EQ(1u, infobar_tab_helper()->GetInfoBarCount());
344 361
345 // Removing an |InfoBarDelegate| from the |InfoBarTabHelper| does not delete 362 // Removing an |InfoBarDelegate| from the |InfoBarTabHelper| does not delete
346 // it. Hence the |delegate| must be cleaned up after it was removed from the 363 // it. Hence the |delegate| must be cleaned up after it was removed from the
347 // |infobar_tab_helper|. 364 // |infobar_tab_helper|.
348 scoped_ptr<InfoBarDelegate> delegate( 365 scoped_ptr<InfoBarDelegate> delegate(
349 infobar_tab_helper()->GetInfoBarDelegateAt(0)); 366 infobar_tab_helper()->GetInfoBarDelegateAt(0));
350 infobar_tab_helper()->RemoveInfoBar(delegate.get()); 367 infobar_tab_helper()->RemoveInfoBar(delegate.get());
351 // Right now InfoBarDelegates delete themselves via 368 // Right now InfoBarDelegates delete themselves via
352 // InfoBarClosed(); once InfoBars own their delegates, this can become a 369 // InfoBarClosed(); once InfoBars own their delegates, this can become a
353 // simple reset() call 370 // simple reset() call
354 delegate.release()->InfoBarClosed(); 371 delegate.release()->InfoBarClosed();
355 } 372 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698