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

Unified Diff: content/browser/plugin_loader_posix_unittest.cc

Issue 1862513003: Remove NPAPI from browser and utility (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase Created 4 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « content/browser/plugin_loader_posix.cc ('k') | content/browser/plugin_process_host.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/browser/plugin_loader_posix_unittest.cc
diff --git a/content/browser/plugin_loader_posix_unittest.cc b/content/browser/plugin_loader_posix_unittest.cc
deleted file mode 100644
index ec1fa0b51f7d707221b88a414e2253ee1bf5e256..0000000000000000000000000000000000000000
--- a/content/browser/plugin_loader_posix_unittest.cc
+++ /dev/null
@@ -1,426 +0,0 @@
-// Copyright (c) 2012 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 "content/browser/plugin_loader_posix.h"
-
-#include <stddef.h>
-#include <stdint.h>
-
-#include "base/at_exit.h"
-#include "base/bind.h"
-#include "base/files/file_path.h"
-#include "base/memory/ref_counted.h"
-#include "base/message_loop/message_loop.h"
-#include "base/strings/utf_string_conversions.h"
-#include "content/browser/browser_thread_impl.h"
-#include "content/common/plugin_list.h"
-#include "testing/gmock/include/gmock/gmock.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-using base::ASCIIToUTF16;
-
-namespace content {
-
-class MockPluginLoaderPosix : public PluginLoaderPosix {
- public:
- MOCK_METHOD0(LoadPluginsInternal, void(void));
-
- size_t number_of_pending_callbacks() {
- return callbacks_.size();
- }
-
- std::vector<base::FilePath>* canonical_list() {
- return &canonical_list_;
- }
-
- size_t next_load_index() {
- return next_load_index_;
- }
-
- const std::vector<WebPluginInfo>& loaded_plugins() {
- return loaded_plugins_;
- }
-
- std::vector<WebPluginInfo>* internal_plugins() {
- return &internal_plugins_;
- }
-
- void RealLoadPluginsInternal() {
- PluginLoaderPosix::LoadPluginsInternal();
- }
-
- bool LaunchUtilityProcess() override {
- // This method always does nothing and returns false. The actual
- // implementation of this method launches another process, which is not
- // very unit_test friendly.
- return false;
- }
-
- void TestOnPluginLoaded(uint32_t index, const WebPluginInfo& plugin) {
- OnPluginLoaded(index, plugin);
- }
-
- void TestOnPluginLoadFailed(uint32_t index, const base::FilePath& path) {
- OnPluginLoadFailed(index, path);
- }
-
- protected:
- virtual ~MockPluginLoaderPosix() {}
-};
-
-void VerifyCallback(int* run_count, const std::vector<WebPluginInfo>&) {
- ++(*run_count);
-}
-
-class PluginLoaderPosixTest : public testing::Test {
- public:
- PluginLoaderPosixTest()
- : plugin1_(ASCIIToUTF16("plugin1"), base::FilePath("/tmp/one.plugin"),
- ASCIIToUTF16("1.0"), base::string16()),
- plugin2_(ASCIIToUTF16("plugin2"), base::FilePath("/tmp/two.plugin"),
- ASCIIToUTF16("2.0"), base::string16()),
- plugin3_(ASCIIToUTF16("plugin3"), base::FilePath("/tmp/three.plugin"),
- ASCIIToUTF16("3.0"), base::string16()),
- file_thread_(BrowserThread::FILE, &message_loop_),
- io_thread_(BrowserThread::IO, &message_loop_),
- plugin_loader_(new MockPluginLoaderPosix) {
- }
-
- void SetUp() override { PluginServiceImpl::GetInstance()->Init(); }
-
- base::MessageLoop* message_loop() { return &message_loop_; }
- MockPluginLoaderPosix* plugin_loader() { return plugin_loader_.get(); }
-
- void AddThreePlugins() {
- plugin_loader_->canonical_list()->clear();
- plugin_loader_->canonical_list()->push_back(plugin1_.path);
- plugin_loader_->canonical_list()->push_back(plugin2_.path);
- plugin_loader_->canonical_list()->push_back(plugin3_.path);
- }
-
- // Data used for testing.
- WebPluginInfo plugin1_;
- WebPluginInfo plugin2_;
- WebPluginInfo plugin3_;
-
- private:
- // Destroys PluginService and PluginList.
- base::ShadowingAtExitManager at_exit_manager_;
-
- base::MessageLoopForIO message_loop_;
- BrowserThreadImpl file_thread_;
- BrowserThreadImpl io_thread_;
-
- scoped_refptr<MockPluginLoaderPosix> plugin_loader_;
-};
-
-TEST_F(PluginLoaderPosixTest, QueueRequests) {
- int did_callback = 0;
- PluginService::GetPluginsCallback callback =
- base::Bind(&VerifyCallback, base::Unretained(&did_callback));
-
- plugin_loader()->GetPlugins(callback);
- plugin_loader()->GetPlugins(callback);
-
- EXPECT_CALL(*plugin_loader(), LoadPluginsInternal()).Times(1);
- message_loop()->RunUntilIdle();
-
- EXPECT_EQ(0, did_callback);
-
- plugin_loader()->canonical_list()->clear();
- plugin_loader()->canonical_list()->push_back(plugin1_.path);
- plugin_loader()->TestOnPluginLoaded(0, plugin1_);
- message_loop()->RunUntilIdle();
-
- EXPECT_EQ(2, did_callback);
-}
-
-TEST_F(PluginLoaderPosixTest, QueueRequestsAndInvalidate) {
- int did_callback = 0;
- PluginService::GetPluginsCallback callback =
- base::Bind(&VerifyCallback, base::Unretained(&did_callback));
-
- plugin_loader()->GetPlugins(callback);
-
- EXPECT_CALL(*plugin_loader(), LoadPluginsInternal()).Times(1);
- message_loop()->RunUntilIdle();
-
- EXPECT_EQ(0, did_callback);
- ::testing::Mock::VerifyAndClearExpectations(plugin_loader());
-
- // Invalidate the plugin list, then queue up another request.
- PluginList::Singleton()->RefreshPlugins();
- plugin_loader()->GetPlugins(callback);
-
- EXPECT_CALL(*plugin_loader(), LoadPluginsInternal()).Times(1);
-
- plugin_loader()->canonical_list()->clear();
- plugin_loader()->canonical_list()->push_back(plugin1_.path);
- plugin_loader()->TestOnPluginLoaded(0, plugin1_);
- message_loop()->RunUntilIdle();
-
- // Only the first request should have been fulfilled.
- EXPECT_EQ(1, did_callback);
-
- plugin_loader()->canonical_list()->clear();
- plugin_loader()->canonical_list()->push_back(plugin1_.path);
- plugin_loader()->TestOnPluginLoaded(0, plugin1_);
- message_loop()->RunUntilIdle();
-
- EXPECT_EQ(2, did_callback);
-}
-
-TEST_F(PluginLoaderPosixTest, ThreeSuccessfulLoads) {
- int did_callback = 0;
- PluginService::GetPluginsCallback callback =
- base::Bind(&VerifyCallback, base::Unretained(&did_callback));
-
- plugin_loader()->GetPlugins(callback);
-
- EXPECT_CALL(*plugin_loader(), LoadPluginsInternal()).Times(1);
- message_loop()->RunUntilIdle();
-
- AddThreePlugins();
-
- EXPECT_EQ(0u, plugin_loader()->next_load_index());
-
- const std::vector<WebPluginInfo>& plugins(plugin_loader()->loaded_plugins());
-
- plugin_loader()->TestOnPluginLoaded(0, plugin1_);
- EXPECT_EQ(1u, plugin_loader()->next_load_index());
- EXPECT_EQ(1u, plugins.size());
- EXPECT_EQ(plugin1_.name, plugins[0].name);
-
- message_loop()->RunUntilIdle();
- EXPECT_EQ(0, did_callback);
-
- plugin_loader()->TestOnPluginLoaded(1, plugin2_);
- EXPECT_EQ(2u, plugin_loader()->next_load_index());
- EXPECT_EQ(2u, plugins.size());
- EXPECT_EQ(plugin2_.name, plugins[1].name);
-
- message_loop()->RunUntilIdle();
- EXPECT_EQ(0, did_callback);
-
- plugin_loader()->TestOnPluginLoaded(2, plugin3_);
- EXPECT_EQ(3u, plugins.size());
- EXPECT_EQ(plugin3_.name, plugins[2].name);
-
- message_loop()->RunUntilIdle();
- EXPECT_EQ(1, did_callback);
-}
-
-TEST_F(PluginLoaderPosixTest, ThreeSuccessfulLoadsThenCrash) {
- int did_callback = 0;
- PluginService::GetPluginsCallback callback =
- base::Bind(&VerifyCallback, base::Unretained(&did_callback));
-
- plugin_loader()->GetPlugins(callback);
-
- EXPECT_CALL(*plugin_loader(), LoadPluginsInternal()).Times(2);
- message_loop()->RunUntilIdle();
-
- AddThreePlugins();
-
- EXPECT_EQ(0u, plugin_loader()->next_load_index());
-
- const std::vector<WebPluginInfo>& plugins(plugin_loader()->loaded_plugins());
-
- plugin_loader()->TestOnPluginLoaded(0, plugin1_);
- EXPECT_EQ(1u, plugin_loader()->next_load_index());
- EXPECT_EQ(1u, plugins.size());
- EXPECT_EQ(plugin1_.name, plugins[0].name);
-
- message_loop()->RunUntilIdle();
- EXPECT_EQ(0, did_callback);
-
- plugin_loader()->TestOnPluginLoaded(1, plugin2_);
- EXPECT_EQ(2u, plugin_loader()->next_load_index());
- EXPECT_EQ(2u, plugins.size());
- EXPECT_EQ(plugin2_.name, plugins[1].name);
-
- message_loop()->RunUntilIdle();
- EXPECT_EQ(0, did_callback);
-
- plugin_loader()->TestOnPluginLoaded(2, plugin3_);
- EXPECT_EQ(3u, plugins.size());
- EXPECT_EQ(plugin3_.name, plugins[2].name);
-
- message_loop()->RunUntilIdle();
- EXPECT_EQ(1, did_callback);
-
- plugin_loader()->OnProcessCrashed(42);
-}
-
-TEST_F(PluginLoaderPosixTest, TwoFailures) {
- int did_callback = 0;
- PluginService::GetPluginsCallback callback =
- base::Bind(&VerifyCallback, base::Unretained(&did_callback));
-
- plugin_loader()->GetPlugins(callback);
-
- EXPECT_CALL(*plugin_loader(), LoadPluginsInternal()).Times(1);
- message_loop()->RunUntilIdle();
-
- AddThreePlugins();
-
- EXPECT_EQ(0u, plugin_loader()->next_load_index());
-
- const std::vector<WebPluginInfo>& plugins(plugin_loader()->loaded_plugins());
-
- plugin_loader()->TestOnPluginLoadFailed(0, plugin1_.path);
- EXPECT_EQ(1u, plugin_loader()->next_load_index());
- EXPECT_EQ(0u, plugins.size());
-
- message_loop()->RunUntilIdle();
- EXPECT_EQ(0, did_callback);
-
- plugin_loader()->TestOnPluginLoaded(1, plugin2_);
- EXPECT_EQ(2u, plugin_loader()->next_load_index());
- EXPECT_EQ(1u, plugins.size());
- EXPECT_EQ(plugin2_.name, plugins[0].name);
-
- message_loop()->RunUntilIdle();
- EXPECT_EQ(0, did_callback);
-
- plugin_loader()->TestOnPluginLoadFailed(2, plugin3_.path);
- EXPECT_EQ(1u, plugins.size());
-
- message_loop()->RunUntilIdle();
- EXPECT_EQ(1, did_callback);
-}
-
-TEST_F(PluginLoaderPosixTest, CrashedProcess) {
- int did_callback = 0;
- PluginService::GetPluginsCallback callback =
- base::Bind(&VerifyCallback, base::Unretained(&did_callback));
-
- plugin_loader()->GetPlugins(callback);
-
- EXPECT_CALL(*plugin_loader(), LoadPluginsInternal()).Times(1);
- message_loop()->RunUntilIdle();
-
- AddThreePlugins();
-
- EXPECT_EQ(0u, plugin_loader()->next_load_index());
-
- const std::vector<WebPluginInfo>& plugins(plugin_loader()->loaded_plugins());
-
- plugin_loader()->TestOnPluginLoaded(0, plugin1_);
- EXPECT_EQ(1u, plugin_loader()->next_load_index());
- EXPECT_EQ(1u, plugins.size());
- EXPECT_EQ(plugin1_.name, plugins[0].name);
-
- message_loop()->RunUntilIdle();
- EXPECT_EQ(0, did_callback);
-
- EXPECT_CALL(*plugin_loader(), LoadPluginsInternal()).Times(1);
- plugin_loader()->OnProcessCrashed(42);
- EXPECT_EQ(1u, plugin_loader()->canonical_list()->size());
- EXPECT_EQ(0u, plugin_loader()->next_load_index());
- EXPECT_EQ(plugin3_.path.value(),
- plugin_loader()->canonical_list()->at(0).value());
-}
-
-TEST_F(PluginLoaderPosixTest, InternalPlugin) {
- int did_callback = 0;
- PluginService::GetPluginsCallback callback =
- base::Bind(&VerifyCallback, base::Unretained(&did_callback));
-
- plugin_loader()->GetPlugins(callback);
-
- EXPECT_CALL(*plugin_loader(), LoadPluginsInternal()).Times(1);
- message_loop()->RunUntilIdle();
-
- plugin2_.path = base::FilePath("/internal/plugin.plugin");
-
- AddThreePlugins();
-
- plugin_loader()->internal_plugins()->clear();
- plugin_loader()->internal_plugins()->push_back(plugin2_);
-
- EXPECT_EQ(0u, plugin_loader()->next_load_index());
-
- const std::vector<WebPluginInfo>& plugins(plugin_loader()->loaded_plugins());
-
- plugin_loader()->TestOnPluginLoaded(0, plugin1_);
- EXPECT_EQ(1u, plugin_loader()->next_load_index());
- EXPECT_EQ(1u, plugins.size());
- EXPECT_EQ(plugin1_.name, plugins[0].name);
-
- message_loop()->RunUntilIdle();
- EXPECT_EQ(0, did_callback);
-
- // Internal plugins can fail to load if they're built-in with manual
- // entrypoint functions.
- plugin_loader()->TestOnPluginLoadFailed(1, plugin2_.path);
- EXPECT_EQ(2u, plugin_loader()->next_load_index());
- EXPECT_EQ(2u, plugins.size());
- EXPECT_EQ(plugin2_.name, plugins[1].name);
- EXPECT_EQ(0u, plugin_loader()->internal_plugins()->size());
-
- message_loop()->RunUntilIdle();
- EXPECT_EQ(0, did_callback);
-
- plugin_loader()->TestOnPluginLoaded(2, plugin3_);
- EXPECT_EQ(3u, plugins.size());
- EXPECT_EQ(plugin3_.name, plugins[2].name);
-
- message_loop()->RunUntilIdle();
- EXPECT_EQ(1, did_callback);
-}
-
-TEST_F(PluginLoaderPosixTest, AllCrashed) {
- int did_callback = 0;
- PluginService::GetPluginsCallback callback =
- base::Bind(&VerifyCallback, base::Unretained(&did_callback));
-
- plugin_loader()->GetPlugins(callback);
-
- // Spin the loop so that the canonical list of plugins can be set.
- EXPECT_CALL(*plugin_loader(), LoadPluginsInternal()).Times(1);
- message_loop()->RunUntilIdle();
- AddThreePlugins();
-
- EXPECT_EQ(0u, plugin_loader()->next_load_index());
-
- // Mock the first two calls like normal.
- testing::Expectation first =
- EXPECT_CALL(*plugin_loader(), LoadPluginsInternal()).Times(2);
- // On the last call, go through the default impl.
- EXPECT_CALL(*plugin_loader(), LoadPluginsInternal())
- .After(first)
- .WillOnce(
- testing::Invoke(plugin_loader(),
- &MockPluginLoaderPosix::RealLoadPluginsInternal));
- plugin_loader()->OnProcessCrashed(42);
- plugin_loader()->OnProcessCrashed(42);
- plugin_loader()->OnProcessCrashed(42);
-
- message_loop()->RunUntilIdle();
- EXPECT_EQ(1, did_callback);
-
- EXPECT_EQ(0u, plugin_loader()->loaded_plugins().size());
-}
-
-TEST_F(PluginLoaderPosixTest, PluginLaunchFailed) {
- int did_callback = 0;
- PluginService::GetPluginsCallback callback =
- base::Bind(&VerifyCallback, base::Unretained(&did_callback));
-
- EXPECT_CALL(*plugin_loader(), LoadPluginsInternal())
- .WillOnce(testing::Invoke(
- plugin_loader(), &MockPluginLoaderPosix::RealLoadPluginsInternal));
-
- plugin_loader()->GetPlugins(callback);
- message_loop()->RunUntilIdle();
- EXPECT_EQ(1, did_callback);
- EXPECT_EQ(0u, plugin_loader()->loaded_plugins().size());
-
- // TODO(erikchen): This is a genuine leak that should be fixed.
- // https://code.google.com/p/chromium/issues/detail?id=431906
- testing::Mock::AllowLeak(plugin_loader());
-}
-
-} // namespace content
« no previous file with comments | « content/browser/plugin_loader_posix.cc ('k') | content/browser/plugin_process_host.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698