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

Side by Side Diff: chrome/browser/extensions/extension_service_unittest.cc

Issue 6852029: [Sync] Move some extension-sync-related logic to ExtensionService (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Add TODO, fix lint Created 9 years, 8 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) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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/extensions/extension_service_unittest.h" 5 #include "chrome/browser/extensions/extension_service_unittest.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <set> 8 #include <set>
9 #include <vector> 9 #include <vector>
10 10
(...skipping 10 matching lines...) Expand all
21 #include "base/string_number_conversions.h" 21 #include "base/string_number_conversions.h"
22 #include "base/string_util.h" 22 #include "base/string_util.h"
23 #include "base/task.h" 23 #include "base/task.h"
24 #include "base/utf_string_conversions.h" 24 #include "base/utf_string_conversions.h"
25 #include "base/version.h" 25 #include "base/version.h"
26 #include "chrome/browser/extensions/crx_installer.h" 26 #include "chrome/browser/extensions/crx_installer.h"
27 #include "chrome/browser/extensions/extension_creator.h" 27 #include "chrome/browser/extensions/extension_creator.h"
28 #include "chrome/browser/extensions/extension_error_reporter.h" 28 #include "chrome/browser/extensions/extension_error_reporter.h"
29 #include "chrome/browser/extensions/extension_service.h" 29 #include "chrome/browser/extensions/extension_service.h"
30 #include "chrome/browser/extensions/extension_special_storage_policy.h" 30 #include "chrome/browser/extensions/extension_special_storage_policy.h"
31 #include "chrome/browser/extensions/extension_sync_data.h"
32 #include "chrome/browser/extensions/extension_updater.h"
31 #include "chrome/browser/extensions/external_extension_provider_impl.h" 33 #include "chrome/browser/extensions/external_extension_provider_impl.h"
32 #include "chrome/browser/extensions/external_extension_provider_interface.h" 34 #include "chrome/browser/extensions/external_extension_provider_interface.h"
33 #include "chrome/browser/extensions/external_pref_extension_loader.h" 35 #include "chrome/browser/extensions/external_pref_extension_loader.h"
34 #include "chrome/browser/extensions/pack_extension_job.cc" 36 #include "chrome/browser/extensions/pack_extension_job.cc"
37 #include "chrome/browser/extensions/pending_extension_info.h"
38 #include "chrome/browser/extensions/pending_extension_manager.h"
35 #include "chrome/browser/prefs/browser_prefs.h" 39 #include "chrome/browser/prefs/browser_prefs.h"
36 #include "chrome/browser/prefs/pref_service_mock_builder.h" 40 #include "chrome/browser/prefs/pref_service_mock_builder.h"
37 #include "chrome/browser/prefs/scoped_user_pref_update.h" 41 #include "chrome/browser/prefs/scoped_user_pref_update.h"
38 #include "chrome/common/chrome_paths.h" 42 #include "chrome/common/chrome_paths.h"
39 #include "chrome/common/chrome_switches.h" 43 #include "chrome/common/chrome_switches.h"
40 #include "chrome/common/extensions/extension.h" 44 #include "chrome/common/extensions/extension.h"
41 #include "chrome/common/extensions/extension_constants.h" 45 #include "chrome/common/extensions/extension_constants.h"
42 #include "chrome/common/extensions/extension_resource.h" 46 #include "chrome/common/extensions/extension_resource.h"
43 #include "chrome/common/extensions/url_pattern.h" 47 #include "chrome/common/extensions/url_pattern.h"
44 #include "chrome/common/json_value_serializer.h" 48 #include "chrome/common/json_value_serializer.h"
(...skipping 343 matching lines...) Expand 10 before | Expand all | Expand 10 after
388 ExtensionServiceTestBase::~ExtensionServiceTestBase() { 392 ExtensionServiceTestBase::~ExtensionServiceTestBase() {
389 // Drop our reference to ExtensionService and TestingProfile, so that they 393 // Drop our reference to ExtensionService and TestingProfile, so that they
390 // can be destroyed while BrowserThreads and MessageLoop are still around 394 // can be destroyed while BrowserThreads and MessageLoop are still around
391 // (they are used in the destruction process). 395 // (they are used in the destruction process).
392 service_ = NULL; 396 service_ = NULL;
393 profile_.reset(NULL); 397 profile_.reset(NULL);
394 MessageLoop::current()->RunAllPending(); 398 MessageLoop::current()->RunAllPending();
395 } 399 }
396 400
397 void ExtensionServiceTestBase::InitializeExtensionService( 401 void ExtensionServiceTestBase::InitializeExtensionService(
398 const FilePath& pref_file, const FilePath& extensions_install_dir) { 402 const FilePath& pref_file, const FilePath& extensions_install_dir,
403 bool autoupdate_enabled) {
399 ExtensionTestingProfile* profile = new ExtensionTestingProfile(); 404 ExtensionTestingProfile* profile = new ExtensionTestingProfile();
400 // Create a PrefService that only contains user defined preference values. 405 // Create a PrefService that only contains user defined preference values.
401 PrefService* prefs = 406 PrefService* prefs =
402 PrefServiceMockBuilder().WithUserFilePrefs(pref_file).Create(); 407 PrefServiceMockBuilder().WithUserFilePrefs(pref_file).Create();
403 Profile::RegisterUserPrefs(prefs); 408 Profile::RegisterUserPrefs(prefs);
404 browser::RegisterUserPrefs(prefs); 409 browser::RegisterUserPrefs(prefs);
405 profile->SetPrefService(prefs); 410 profile->SetPrefService(prefs);
406 411
407 profile_.reset(profile); 412 profile_.reset(profile);
408 413
409 service_ = profile->CreateExtensionService( 414 service_ = profile->CreateExtensionService(
410 CommandLine::ForCurrentProcess(), 415 CommandLine::ForCurrentProcess(),
411 extensions_install_dir); 416 extensions_install_dir,
417 autoupdate_enabled);
412 service_->set_extensions_enabled(true); 418 service_->set_extensions_enabled(true);
413 service_->set_show_extensions_prompts(false); 419 service_->set_show_extensions_prompts(false);
414 profile->set_extensions_service(service_.get()); 420 profile->set_extensions_service(service_.get());
415 421
416 // When we start up, we want to make sure there is no external provider, 422 // When we start up, we want to make sure there is no external provider,
417 // since the ExtensionService on Windows will use the Registry as a default 423 // since the ExtensionService on Windows will use the Registry as a default
418 // provider and if there is something already registered there then it will 424 // provider and if there is something already registered there then it will
419 // interfere with the tests. Those tests that need an external provider 425 // interfere with the tests. Those tests that need an external provider
420 // will register one specifically. 426 // will register one specifically.
421 service_->ClearProvidersForTesting(); 427 service_->ClearProvidersForTesting();
422 428
423 total_successes_ = 0; 429 total_successes_ = 0;
424 } 430 }
425 431
426 void ExtensionServiceTestBase::InitializeInstalledExtensionService( 432 void ExtensionServiceTestBase::InitializeInstalledExtensionService(
427 const FilePath& prefs_file, const FilePath& source_install_dir) { 433 const FilePath& prefs_file, const FilePath& source_install_dir) {
428 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); 434 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir());
429 FilePath path_ = temp_dir_.path(); 435 FilePath path_ = temp_dir_.path();
430 path_ = path_.Append(FILE_PATH_LITERAL("TestingExtensionsPath")); 436 path_ = path_.Append(FILE_PATH_LITERAL("TestingExtensionsPath"));
431 file_util::Delete(path_, true); 437 file_util::Delete(path_, true);
432 file_util::CreateDirectory(path_); 438 file_util::CreateDirectory(path_);
433 FilePath temp_prefs = path_.Append(FILE_PATH_LITERAL("Preferences")); 439 FilePath temp_prefs = path_.Append(FILE_PATH_LITERAL("Preferences"));
434 file_util::CopyFile(prefs_file, temp_prefs); 440 file_util::CopyFile(prefs_file, temp_prefs);
435 441
436 extensions_install_dir_ = path_.Append(FILE_PATH_LITERAL("Extensions")); 442 extensions_install_dir_ = path_.Append(FILE_PATH_LITERAL("Extensions"));
437 file_util::Delete(extensions_install_dir_, true); 443 file_util::Delete(extensions_install_dir_, true);
438 file_util::CopyDirectory(source_install_dir, extensions_install_dir_, true); 444 file_util::CopyDirectory(source_install_dir, extensions_install_dir_, true);
439 445
440 InitializeExtensionService(temp_prefs, extensions_install_dir_); 446 InitializeExtensionService(temp_prefs, extensions_install_dir_, false);
441 } 447 }
442 448
443 void ExtensionServiceTestBase::InitializeEmptyExtensionService() { 449 void ExtensionServiceTestBase::InitializeEmptyExtensionService() {
450 InitializeExtensionServiceHelper(false);
451 }
452
453 void ExtensionServiceTestBase::InitializeExtensionServiceWithUpdater() {
454 InitializeExtensionServiceHelper(true);
455 service_->updater()->Start();
456 }
457
458 void ExtensionServiceTestBase::InitializeExtensionServiceHelper(
459 bool autoupdate_enabled) {
444 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); 460 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir());
445 FilePath path_ = temp_dir_.path(); 461 FilePath path_ = temp_dir_.path();
446 path_ = path_.Append(FILE_PATH_LITERAL("TestingExtensionsPath")); 462 path_ = path_.Append(FILE_PATH_LITERAL("TestingExtensionsPath"));
447 file_util::Delete(path_, true); 463 file_util::Delete(path_, true);
448 file_util::CreateDirectory(path_); 464 file_util::CreateDirectory(path_);
449 FilePath prefs_filename = path_ 465 FilePath prefs_filename = path_
450 .Append(FILE_PATH_LITERAL("TestPreferences")); 466 .Append(FILE_PATH_LITERAL("TestPreferences"));
451 extensions_install_dir_ = path_.Append(FILE_PATH_LITERAL("Extensions")); 467 extensions_install_dir_ = path_.Append(FILE_PATH_LITERAL("Extensions"));
452 file_util::Delete(extensions_install_dir_, true); 468 file_util::Delete(extensions_install_dir_, true);
453 file_util::CreateDirectory(extensions_install_dir_); 469 file_util::CreateDirectory(extensions_install_dir_);
454 470
455 InitializeExtensionService(prefs_filename, extensions_install_dir_); 471 InitializeExtensionService(prefs_filename, extensions_install_dir_,
472 autoupdate_enabled);
456 } 473 }
457 474
458 // static 475 // static
459 void ExtensionServiceTestBase::SetUpTestCase() { 476 void ExtensionServiceTestBase::SetUpTestCase() {
460 ExtensionErrorReporter::Init(false); // no noisy errors 477 ExtensionErrorReporter::Init(false); // no noisy errors
461 } 478 }
462 479
463 void ExtensionServiceTestBase::SetUp() { 480 void ExtensionServiceTestBase::SetUp() {
464 ExtensionErrorReporter::GetInstance()->ClearErrors(); 481 ExtensionErrorReporter::GetInstance()->ClearErrors();
465 } 482 }
(...skipping 2786 matching lines...) Expand 10 before | Expand all | Expand 10 after
3252 BrowserThread ui_thread(BrowserThread::UI, &loop); 3269 BrowserThread ui_thread(BrowserThread::UI, &loop);
3253 BrowserThread file_thread(BrowserThread::FILE, &loop); 3270 BrowserThread file_thread(BrowserThread::FILE, &loop);
3254 scoped_ptr<CommandLine> command_line; 3271 scoped_ptr<CommandLine> command_line;
3255 scoped_refptr<ExtensionService> service; 3272 scoped_refptr<ExtensionService> service;
3256 FilePath install_dir = profile->GetPath() 3273 FilePath install_dir = profile->GetPath()
3257 .AppendASCII(ExtensionService::kInstallDirectoryName); 3274 .AppendASCII(ExtensionService::kInstallDirectoryName);
3258 3275
3259 // By default, we are enabled. 3276 // By default, we are enabled.
3260 command_line.reset(new CommandLine(CommandLine::NO_PROGRAM)); 3277 command_line.reset(new CommandLine(CommandLine::NO_PROGRAM));
3261 service = profile->CreateExtensionService(command_line.get(), 3278 service = profile->CreateExtensionService(command_line.get(),
3262 install_dir); 3279 install_dir,
3280 false);
3263 EXPECT_TRUE(service->extensions_enabled()); 3281 EXPECT_TRUE(service->extensions_enabled());
3264 service->Init(); 3282 service->Init();
3265 loop.RunAllPending(); 3283 loop.RunAllPending();
3266 EXPECT_TRUE(recorder.ready()); 3284 EXPECT_TRUE(recorder.ready());
3267 3285
3268 // If either the command line or pref is set, we are disabled. 3286 // If either the command line or pref is set, we are disabled.
3269 recorder.set_ready(false); 3287 recorder.set_ready(false);
3270 profile.reset(new TestingProfile()); 3288 profile.reset(new TestingProfile());
3271 command_line->AppendSwitch(switches::kDisableExtensions); 3289 command_line->AppendSwitch(switches::kDisableExtensions);
3272 service = profile->CreateExtensionService(command_line.get(), 3290 service = profile->CreateExtensionService(command_line.get(),
3273 install_dir); 3291 install_dir,
3292 false);
3274 EXPECT_FALSE(service->extensions_enabled()); 3293 EXPECT_FALSE(service->extensions_enabled());
3275 service->Init(); 3294 service->Init();
3276 loop.RunAllPending(); 3295 loop.RunAllPending();
3277 EXPECT_TRUE(recorder.ready()); 3296 EXPECT_TRUE(recorder.ready());
3278 3297
3279 recorder.set_ready(false); 3298 recorder.set_ready(false);
3280 profile.reset(new TestingProfile()); 3299 profile.reset(new TestingProfile());
3281 profile->GetPrefs()->SetBoolean(prefs::kDisableExtensions, true); 3300 profile->GetPrefs()->SetBoolean(prefs::kDisableExtensions, true);
3282 service = profile->CreateExtensionService(command_line.get(), 3301 service = profile->CreateExtensionService(command_line.get(),
3283 install_dir); 3302 install_dir,
3303 false);
3284 EXPECT_FALSE(service->extensions_enabled()); 3304 EXPECT_FALSE(service->extensions_enabled());
3285 service->Init(); 3305 service->Init();
3286 loop.RunAllPending(); 3306 loop.RunAllPending();
3287 EXPECT_TRUE(recorder.ready()); 3307 EXPECT_TRUE(recorder.ready());
3288 3308
3289 recorder.set_ready(false); 3309 recorder.set_ready(false);
3290 profile.reset(new TestingProfile()); 3310 profile.reset(new TestingProfile());
3291 profile->GetPrefs()->SetBoolean(prefs::kDisableExtensions, true); 3311 profile->GetPrefs()->SetBoolean(prefs::kDisableExtensions, true);
3292 command_line.reset(new CommandLine(CommandLine::NO_PROGRAM)); 3312 command_line.reset(new CommandLine(CommandLine::NO_PROGRAM));
3293 service = profile->CreateExtensionService(command_line.get(), 3313 service = profile->CreateExtensionService(command_line.get(),
3294 install_dir); 3314 install_dir,
3315 false);
3295 EXPECT_FALSE(service->extensions_enabled()); 3316 EXPECT_FALSE(service->extensions_enabled());
3296 service->Init(); 3317 service->Init();
3297 loop.RunAllPending(); 3318 loop.RunAllPending();
3298 EXPECT_TRUE(recorder.ready()); 3319 EXPECT_TRUE(recorder.ready());
3299 3320
3300 // Explicitly delete all the resources used in this test. 3321 // Explicitly delete all the resources used in this test.
3301 profile.reset(); 3322 profile.reset();
3302 service = NULL; 3323 service = NULL;
3303 } 3324 }
3304 3325
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
3396 ValidatePrefKeyCount(0); 3417 ValidatePrefKeyCount(0);
3397 3418
3398 // Reload all extensions, and make sure it comes back. 3419 // Reload all extensions, and make sure it comes back.
3399 std::string extension_id = service_->extensions()->at(0)->id(); 3420 std::string extension_id = service_->extensions()->at(0)->id();
3400 loaded_.clear(); 3421 loaded_.clear();
3401 service_->ReloadExtensions(); 3422 service_->ReloadExtensions();
3402 ASSERT_EQ(1u, service_->extensions()->size()); 3423 ASSERT_EQ(1u, service_->extensions()->size());
3403 EXPECT_EQ(extension_id, service_->extensions()->at(0)->id()); 3424 EXPECT_EQ(extension_id, service_->extensions()->at(0)->id());
3404 } 3425 }
3405 3426
3427 TEST_F(ExtensionServiceTest, ProcessSyncDataUninstall) {
3428 InitializeEmptyExtensionService();
3429
3430 ExtensionSyncData extension_sync_data;
3431 extension_sync_data.id = good_crx;
3432 extension_sync_data.uninstalled = true;
3433
3434 // Should do nothing.
3435 service_->ProcessSyncData(extension_sync_data);
3436
3437 // Install the extension.
3438 FilePath extension_path = data_dir_.AppendASCII("good.crx");
3439 InstallCrx(extension_path, true);
3440 EXPECT_TRUE(service_->GetExtensionById(good_crx, true));
3441
3442 // Should uninstall the extension.
3443 service_->ProcessSyncData(extension_sync_data);
3444 EXPECT_FALSE(service_->GetExtensionById(good_crx, true));
3445
3446 // Should again do nothing.
3447 service_->ProcessSyncData(extension_sync_data);
3448 }
3449
3450
3451 TEST_F(ExtensionServiceTest, ProcessSyncDataSettings) {
3452 InitializeEmptyExtensionService();
3453
3454 FilePath extension_path = data_dir_.AppendASCII("good.crx");
3455 InstallCrx(extension_path, true);
3456 EXPECT_TRUE(service_->IsExtensionEnabled(good_crx));
3457 EXPECT_FALSE(service_->IsIncognitoEnabled(good_crx));
3458
3459 ExtensionSyncData extension_sync_data;
3460 extension_sync_data.id = good_crx;
3461 extension_sync_data.version =
3462 *(service_->GetExtensionById(good_crx, true)->version());
3463
3464 extension_sync_data.enabled = false;
3465 service_->ProcessSyncData(extension_sync_data);
3466 EXPECT_FALSE(service_->IsExtensionEnabled(good_crx));
3467 EXPECT_FALSE(service_->IsIncognitoEnabled(good_crx));
3468
3469 extension_sync_data.enabled = true;
3470 extension_sync_data.incognito_enabled = true;
3471 service_->ProcessSyncData(extension_sync_data);
3472 EXPECT_TRUE(service_->IsExtensionEnabled(good_crx));
3473 EXPECT_TRUE(service_->IsIncognitoEnabled(good_crx));
3474
3475 extension_sync_data.enabled = false;
3476 extension_sync_data.incognito_enabled = true;
3477 service_->ProcessSyncData(extension_sync_data);
3478 EXPECT_FALSE(service_->IsExtensionEnabled(good_crx));
3479 EXPECT_TRUE(service_->IsIncognitoEnabled(good_crx));
3480
3481 EXPECT_FALSE(service_->pending_extension_manager()->IsIdPending(good_crx));
3482 }
3483
3484 TEST_F(ExtensionServiceTest, ProcessSyncDataVersionCheck) {
3485 InitializeExtensionServiceWithUpdater();
3486
3487 // Install the extension.
3488 FilePath extension_path = data_dir_.AppendASCII("good.crx");
3489 InstallCrx(extension_path, true);
3490 EXPECT_TRUE(service_->IsExtensionEnabled(good_crx));
3491 EXPECT_FALSE(service_->IsIncognitoEnabled(good_crx));
3492
3493 ExtensionSyncData extension_sync_data;
3494 extension_sync_data.id = good_crx;
3495 extension_sync_data.enabled = true;
3496 extension_sync_data.version =
3497 *(service_->GetExtensionById(good_crx, true)->version());
3498
3499 // Should do nothing if extension version == sync version.
3500 service_->ProcessSyncData(extension_sync_data);
3501 EXPECT_FALSE(service_->updater()->WillCheckSoon());
3502
3503 // Should do nothing if extension version > sync version (but see
3504 // the TODO in ProcessSyncData).
3505 {
3506 scoped_ptr<Version> version(Version::GetVersionFromString("0.0.0.0"));
3507 extension_sync_data.version = *version;
3508 service_->ProcessSyncData(extension_sync_data);
3509 EXPECT_FALSE(service_->updater()->WillCheckSoon());
3510 }
3511
3512 // Should kick off an update if extension version < sync version.
3513 {
3514 scoped_ptr<Version> version(Version::GetVersionFromString("9.9.9.9"));
3515 extension_sync_data.version = *version;
3516 service_->ProcessSyncData(extension_sync_data);
3517 EXPECT_TRUE(service_->updater()->WillCheckSoon());
3518 }
3519
3520 EXPECT_FALSE(service_->pending_extension_manager()->IsIdPending(good_crx));
3521 }
3522
3523 TEST_F(ExtensionServiceTest, ProcessSyncDataNotInstalled) {
3524 InitializeExtensionServiceWithUpdater();
3525
3526 ExtensionSyncData extension_sync_data;
3527 extension_sync_data.id = good_crx;
3528 extension_sync_data.update_url = GURL("http://www.google.com");
3529 extension_sync_data.enabled = true;
3530 {
3531 scoped_ptr<Version> version(Version::GetVersionFromString("1.2.3.4"));
3532 extension_sync_data.version = *version;
3533 }
3534
3535 service_->ProcessSyncData(extension_sync_data);
3536 EXPECT_TRUE(service_->updater()->WillCheckSoon());
3537
3538 PendingExtensionInfo info;
3539 EXPECT_TRUE(
3540 service_->pending_extension_manager()->GetById(good_crx, &info));
3541 EXPECT_EQ(extension_sync_data.update_url, info.update_url());
3542 EXPECT_TRUE(info.is_from_sync());
3543 EXPECT_TRUE(info.install_silently());
3544 EXPECT_EQ(extension_sync_data.enabled, info.enable_on_install());
3545 EXPECT_EQ(extension_sync_data.incognito_enabled,
3546 info.enable_incognito_on_install());
3547 EXPECT_EQ(Extension::INTERNAL, info.install_source());
3548 // TODO(akalin): Figure out a way to test |info.ShouldAllowInstall()|.
3549 }
3550
3406 // Test that when multiple sources try to install an extension, 3551 // Test that when multiple sources try to install an extension,
3407 // we consistently choose the right one. To make tests easy to read, 3552 // we consistently choose the right one. To make tests easy to read,
3408 // methods that fake requests to install crx files in several ways 3553 // methods that fake requests to install crx files in several ways
3409 // are provided. 3554 // are provided.
3410 class ExtensionSourcePriorityTest : public ExtensionServiceTest { 3555 class ExtensionSourcePriorityTest : public ExtensionServiceTest {
3411 public: 3556 public:
3412 void SetUp() { 3557 void SetUp() {
3413 // All tests use a single extension. Put the id and path in member vars 3558 // All tests use a single extension. Put the id and path in member vars
3414 // that all methods can read. 3559 // that all methods can read.
3415 crx_id_ = kGoodId; 3560 crx_id_ = kGoodId;
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after
3573 ASSERT_FALSE(AddPendingSyncInstall()); 3718 ASSERT_FALSE(AddPendingSyncInstall());
3574 3719
3575 // Wait for the external source to install. 3720 // Wait for the external source to install.
3576 WaitForCrxInstall(crx_path_, true); 3721 WaitForCrxInstall(crx_path_, true);
3577 ASSERT_TRUE(IsCrxInstalled()); 3722 ASSERT_TRUE(IsCrxInstalled());
3578 3723
3579 // Now that the extension is installed, sync request should fail 3724 // Now that the extension is installed, sync request should fail
3580 // because the extension is already installed. 3725 // because the extension is already installed.
3581 ASSERT_FALSE(AddPendingSyncInstall()); 3726 ASSERT_FALSE(AddPendingSyncInstall());
3582 } 3727 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698