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

Unified Diff: trunk/src/chrome/browser/chromeos/extensions/device_local_account_external_policy_loader_unittest.cc

Issue 32513006: Revert 229896 "Cache force-installed apps/extensions in device-l..." (Closed) Base URL: svn://svn.chromium.org/chrome/
Patch Set: Created 7 years, 2 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 side-by-side diff with in-line comments
Download patch
Index: trunk/src/chrome/browser/chromeos/extensions/device_local_account_external_policy_loader_unittest.cc
===================================================================
--- trunk/src/chrome/browser/chromeos/extensions/device_local_account_external_policy_loader_unittest.cc (revision 229896)
+++ trunk/src/chrome/browser/chromeos/extensions/device_local_account_external_policy_loader_unittest.cc (working copy)
@@ -1,309 +0,0 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/browser/chromeos/extensions/device_local_account_external_policy_loader.h"
-
-#include <string>
-
-#include "base/callback.h"
-#include "base/file_util.h"
-#include "base/files/scoped_temp_dir.h"
-#include "base/message_loop/message_loop.h"
-#include "base/message_loop/message_loop_proxy.h"
-#include "base/path_service.h"
-#include "base/run_loop.h"
-#include "base/strings/stringprintf.h"
-#include "base/values.h"
-#include "base/version.h"
-#include "chrome/browser/chrome_notification_types.h"
-#include "chrome/browser/extensions/external_provider_impl.h"
-#include "chrome/browser/extensions/external_provider_interface.h"
-#include "chrome/browser/extensions/updater/extension_downloader.h"
-#include "chrome/browser/policy/cloud/mock_cloud_policy_store.h"
-#include "chrome/browser/policy/policy_map.h"
-#include "chrome/browser/policy/policy_types.h"
-#include "chrome/common/chrome_paths.h"
-#include "chrome/common/extensions/extension.h"
-#include "chrome/common/extensions/extension_constants.h"
-#include "chrome/test/base/testing_browser_process.h"
-#include "content/public/browser/notification_service.h"
-#include "content/public/browser/notification_source.h"
-#include "content/public/browser/render_process_host.h"
-#include "content/public/test/test_browser_thread_bundle.h"
-#include "content/public/test/test_utils.h"
-#include "extensions/common/manifest.h"
-#include "net/url_request/test_url_fetcher_factory.h"
-#include "net/url_request/url_fetcher_delegate.h"
-#include "net/url_request/url_request_context_getter.h"
-#include "net/url_request/url_request_test_util.h"
-#include "policy/policy_constants.h"
-#include "testing/gmock/include/gmock/gmock.h"
-#include "testing/gtest/include/gtest/gtest.h"
-#include "url/gurl.h"
-
-using ::testing::InvokeWithoutArgs;
-using ::testing::Mock;
-using ::testing::_;
-
-namespace chromeos {
-
-namespace {
-
-const char kCacheDir[] = "cache";
-const char kExtensionId[] = "ldnnhddmnhbkjipkidpdiheffobcpfmf";
-const char kExtensionUpdateManifest[] =
- "extensions/good_v1_update_manifest.xml";
-const char kExtensionCRXSourceDir[] = "extensions";
-const char kExtensionCRXFile[] = "good.crx";
-const char kExtensionCRXVersion[] = "1.0.0.0";
-
-class MockExternalPolicyProviderVisitor
- : public extensions::ExternalProviderInterface::VisitorInterface {
- public:
- MockExternalPolicyProviderVisitor();
- virtual ~MockExternalPolicyProviderVisitor();
-
- MOCK_METHOD6(OnExternalExtensionFileFound,
- bool(const std::string&,
- const base::Version*,
- const base::FilePath&,
- extensions::Manifest::Location,
- int,
- bool));
- MOCK_METHOD5(OnExternalExtensionUpdateUrlFound,
- bool(const std::string&,
- const GURL&,
- extensions::Manifest::Location,
- int,
- bool));
- MOCK_METHOD1(OnExternalProviderReady,
- void(const extensions::ExternalProviderInterface* provider));
-
- private:
- DISALLOW_COPY_AND_ASSIGN(MockExternalPolicyProviderVisitor);
-};
-
-MockExternalPolicyProviderVisitor::MockExternalPolicyProviderVisitor() {
-}
-
-MockExternalPolicyProviderVisitor::~MockExternalPolicyProviderVisitor() {
-}
-
-} // namespace
-
-class DeviceLocalAccountExternalPolicyLoaderTest : public testing::Test {
- protected:
- DeviceLocalAccountExternalPolicyLoaderTest();
- virtual ~DeviceLocalAccountExternalPolicyLoaderTest();
-
- virtual void SetUp() OVERRIDE;
- virtual void TearDown() OVERRIDE;
-
- void VerifyAndResetVisitorCallExpectations();
- void SetForceInstallListPolicy();
-
- content::TestBrowserThreadBundle thread_bundle_;
- base::ScopedTempDir temp_dir_;
- base::FilePath cache_dir_;
- policy::MockCloudPolicyStore store_;
- scoped_refptr<net::URLRequestContextGetter> request_context_getter_;
- base::FilePath test_dir_;
-
- scoped_refptr<DeviceLocalAccountExternalPolicyLoader> loader_;
- MockExternalPolicyProviderVisitor visitor_;
- scoped_ptr<extensions::ExternalProviderImpl> provider_;
-};
-
-DeviceLocalAccountExternalPolicyLoaderTest::
- DeviceLocalAccountExternalPolicyLoaderTest()
- : thread_bundle_(content::TestBrowserThreadBundle::IO_MAINLOOP) {
-}
-
-DeviceLocalAccountExternalPolicyLoaderTest::
- ~DeviceLocalAccountExternalPolicyLoaderTest() {
-}
-
-void DeviceLocalAccountExternalPolicyLoaderTest::SetUp() {
- ASSERT_TRUE(temp_dir_.CreateUniqueTempDir());
- cache_dir_ = temp_dir_.path().Append(kCacheDir);
- ASSERT_TRUE(file_util::CreateDirectoryAndGetError(cache_dir_, NULL));
- request_context_getter_ =
- new net::TestURLRequestContextGetter(base::MessageLoopProxy::current());
- TestingBrowserProcess::GetGlobal()->SetSystemRequestContext(
- request_context_getter_.get());
- ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &test_dir_));
-
- loader_ = new DeviceLocalAccountExternalPolicyLoader(&store_, cache_dir_);
- provider_.reset(new extensions::ExternalProviderImpl(
- &visitor_,
- loader_,
- NULL,
- extensions::Manifest::EXTERNAL_POLICY,
- extensions::Manifest::EXTERNAL_POLICY_DOWNLOAD,
- extensions::Extension::NO_FLAGS));
-
- content::RenderProcessHost::SetRunRendererInProcess(true);
-
- VerifyAndResetVisitorCallExpectations();
-}
-
-void DeviceLocalAccountExternalPolicyLoaderTest::TearDown() {
- content::RenderProcessHost::SetRunRendererInProcess(false);
- TestingBrowserProcess::GetGlobal()->SetSystemRequestContext(NULL);
-}
-
-void DeviceLocalAccountExternalPolicyLoaderTest::
- VerifyAndResetVisitorCallExpectations() {
- Mock::VerifyAndClearExpectations(&visitor_);
- EXPECT_CALL(visitor_, OnExternalExtensionFileFound(_, _, _, _, _, _))
- .Times(0);
- EXPECT_CALL(visitor_, OnExternalExtensionUpdateUrlFound(_, _, _, _, _))
- .Times(0);
- EXPECT_CALL(visitor_, OnExternalProviderReady(_))
- .Times(0);
-}
-
-void DeviceLocalAccountExternalPolicyLoaderTest::SetForceInstallListPolicy() {
- scoped_ptr<base::ListValue> forcelist(new base::ListValue);
- forcelist->AppendString("invalid");
- forcelist->AppendString(base::StringPrintf(
- "%s;%s",
- kExtensionId,
- extension_urls::GetWebstoreUpdateUrl().spec().c_str()));
- store_.policy_map_.Set(policy::key::kExtensionInstallForcelist,
- policy::POLICY_LEVEL_MANDATORY,
- policy::POLICY_SCOPE_USER,
- forcelist.release(),
- NULL);
- store_.NotifyStoreLoaded();
-}
-
-// Verifies that when the cache is not explicitly started, the loader does not
-// serve any extensions, even if the force-install list policy is set or a load
-// is manually requested.
-TEST_F(DeviceLocalAccountExternalPolicyLoaderTest, CacheNotStarted) {
- // Set the force-install list policy.
- SetForceInstallListPolicy();
-
- // Manually request a load.
- loader_->StartLoading();
-
- EXPECT_FALSE(loader_->IsCacheRunning());
- EXPECT_TRUE(base::MessageLoop::current()->IsIdleForTesting());
-}
-
-// Verifies that the cache can be started and stopped correctly.
-TEST_F(DeviceLocalAccountExternalPolicyLoaderTest, ForceInstallListEmpty) {
- // Set an empty force-install list policy.
- store_.NotifyStoreLoaded();
-
- // Start the cache. Verify that the loader announces an empty extension list.
- EXPECT_CALL(visitor_, OnExternalProviderReady(provider_.get()))
- .Times(1);
- loader_->StartCache(base::MessageLoopProxy::current());
- VerifyAndResetVisitorCallExpectations();
-
- // Stop the cache. Verify that the loader announces an empty extension list.
- EXPECT_CALL(visitor_, OnExternalProviderReady(provider_.get()))
- .Times(1);
- base::RunLoop run_loop;
- loader_->StopCache(run_loop.QuitClosure());
- VerifyAndResetVisitorCallExpectations();
-
- // Spin the loop until the cache shutdown callback is invoked. Verify that at
- // that point, no further file I/O tasks are pending.
- run_loop.Run();
- EXPECT_TRUE(base::MessageLoop::current()->IsIdleForTesting());
-}
-
-// Verifies that when a force-install list policy referencing an extension is
-// set and the cache is started, the loader downloads, caches and serves the
-// extension.
-TEST_F(DeviceLocalAccountExternalPolicyLoaderTest, ForceInstallListSet) {
- // Set a force-install list policy that contains an invalid entry (which
- // should be ignored) and a valid reference to an extension.
- SetForceInstallListPolicy();
-
- // Start the cache.
- loader_->StartCache(base::MessageLoopProxy::current());
-
- // Spin the loop, allowing the loader to process the force-install list.
- // Verify that the loader announces an empty extension list.
- net::TestURLFetcherFactory factory;
- EXPECT_CALL(visitor_, OnExternalProviderReady(provider_.get()))
- .Times(1);
- base::MessageLoop::current()->RunUntilIdle();
-
- // Verify that a downloader has started and is attempting to download an
- // update manifest.
- net::TestURLFetcher* fetcher = factory.GetFetcherByID(
- extensions::ExtensionDownloader::kManifestFetcherId);
- ASSERT_TRUE(fetcher);
- ASSERT_TRUE(fetcher->delegate());
-
- // Return a manifest to the downloader.
- std::string manifest;
- EXPECT_TRUE(base::ReadFileToString(test_dir_.Append(kExtensionUpdateManifest),
- &manifest));
- fetcher->set_response_code(200);
- fetcher->SetResponseString(manifest);
- fetcher->delegate()->OnURLFetchComplete(fetcher);
-
- // Wait for the manifest to be parsed.
- content::WindowedNotificationObserver(
- chrome::NOTIFICATION_EXTENSION_UPDATE_FOUND,
- content::NotificationService::AllSources()).Wait();
-
- // Verify that the downloader is attempting to download a CRX file.
- fetcher = factory.GetFetcherByID(
- extensions::ExtensionDownloader::kExtensionFetcherId);
- ASSERT_TRUE(fetcher);
- ASSERT_TRUE(fetcher->delegate());
-
- // Create a temporary CRX file and return its path to the downloader.
- EXPECT_TRUE(base::CopyFile(
- test_dir_.Append(kExtensionCRXSourceDir).Append(kExtensionCRXFile),
- temp_dir_.path().Append(kExtensionCRXFile)));
- fetcher->set_response_code(200);
- fetcher->SetResponseFilePath(temp_dir_.path().Append(kExtensionCRXFile));
- fetcher->delegate()->OnURLFetchComplete(fetcher);
-
- // Spin the loop. Verify that the loader announces the presence of a new CRX
- // file, served from the cache directory.
- const base::FilePath cached_crx_path = cache_dir_.Append(base::StringPrintf(
- "%s-%s.crx", kExtensionId, kExtensionCRXVersion));
- base::RunLoop cache_run_loop;
- EXPECT_CALL(visitor_, OnExternalExtensionFileFound(
- kExtensionId,
- _,
- cached_crx_path,
- extensions::Manifest::EXTERNAL_POLICY,
- _,
- _));
- EXPECT_CALL(visitor_, OnExternalProviderReady(provider_.get()))
- .Times(1)
- .WillOnce(InvokeWithoutArgs(&cache_run_loop, &base::RunLoop::Quit));
- cache_run_loop.Run();
- VerifyAndResetVisitorCallExpectations();
-
- // Verify that the CRX file actually exists in the cache directory and its
- // contents matches the file returned to the downloader.
- EXPECT_TRUE(base::ContentsEqual(
- test_dir_.Append(kExtensionCRXSourceDir).Append(kExtensionCRXFile),
- cached_crx_path));
-
- // Stop the cache. Verify that the loader announces an empty extension list.
- EXPECT_CALL(visitor_, OnExternalProviderReady(provider_.get()))
- .Times(1);
- base::RunLoop shutdown_run_loop;
- loader_->StopCache(shutdown_run_loop.QuitClosure());
- VerifyAndResetVisitorCallExpectations();
-
- // Spin the loop until the cache shutdown callback is invoked. Verify that at
- // that point, no further file I/O tasks are pending.
- shutdown_run_loop.Run();
- EXPECT_TRUE(base::MessageLoop::current()->IsIdleForTesting());
-}
-
-} // namespace chromeos

Powered by Google App Engine
This is Rietveld 408576698