Index: mojo/package_manager/capability_filter_content_handler_unittest.cc |
diff --git a/mojo/package_manager/capability_filter_content_handler_unittest.cc b/mojo/package_manager/capability_filter_content_handler_unittest.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..1e313af814ecd0d3f0626de73cbd63b1de6e418e |
--- /dev/null |
+++ b/mojo/package_manager/capability_filter_content_handler_unittest.cc |
@@ -0,0 +1,158 @@ |
+// Copyright 2015 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 "base/path_service.h" |
+#include "mojo/application/public/cpp/application_connection.h" |
+#include "mojo/application/public/cpp/application_delegate.h" |
+#include "mojo/application/public/cpp/application_impl.h" |
+#include "mojo/application/public/cpp/interface_factory.h" |
+#include "mojo/application/public/interfaces/content_handler.mojom.h" |
+#include "mojo/common/weak_binding_set.h" |
+#include "mojo/package_manager/package_manager_impl.h" |
+#include "mojo/shell/capability_filter_test.h" |
+#include "mojo/shell/fetcher.h" |
+#include "testing/gtest/include/gtest/gtest.h" |
+ |
+namespace mojo { |
+namespace package_manager { |
+namespace test { |
+namespace { |
+ |
+const char kTestMimeType[] = "test/mime-type"; |
+ |
+// A custom Fetcher used to trigger a content handler for kTestMimeType for a |
+// specific test. |
+class TestFetcher : public shell::Fetcher { |
+ public: |
+ TestFetcher(const GURL& url, const FetchCallback& callback) |
+ : shell::Fetcher(callback), |
+ url_(url) { |
+ loader_callback_.Run(make_scoped_ptr(this)); |
+ } |
+ ~TestFetcher() override {} |
+ |
+ private: |
+ // Overridden from Fetcher: |
+ const GURL& GetURL() const override { return url_; } |
+ GURL GetRedirectURL() const override { return GURL(); } |
+ GURL GetRedirectReferer() const override { return GURL(); } |
+ URLResponsePtr AsURLResponse(base::TaskRunner* task_runner, |
+ uint32_t skip) override { |
+ URLResponsePtr response(URLResponse::New()); |
+ response->url = url_.spec(); |
+ return response.Pass(); |
+ } |
+ void AsPath( |
+ base::TaskRunner* task_runner, |
+ base::Callback<void(const base::FilePath&, bool)> callback) override {} |
+ std::string MimeType() override { return kTestMimeType; } |
+ bool HasMojoMagic() override { return false; } |
+ bool PeekFirstLine(std::string* line) override { return false; } |
+ |
+ const GURL url_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(TestFetcher); |
+}; |
+ |
+class TestPackageManager : public PackageManagerImpl { |
+ public: |
+ TestPackageManager(const base::FilePath& package_path) |
+ : PackageManagerImpl(package_path, nullptr) {} |
+ ~TestPackageManager() override {} |
+ |
+ private: |
+ // Overridden from PackageManagerImpl: |
+ void FetchRequest( |
+ URLRequestPtr request, |
+ const shell::Fetcher::FetchCallback& loader_callback) override { |
+ new TestFetcher(GURL(request->url), loader_callback); |
+ } |
+ |
+ DISALLOW_COPY_AND_ASSIGN(TestPackageManager); |
+}; |
+ |
+class TestContentHandler : public ApplicationDelegate, |
+ public InterfaceFactory<ContentHandler>, |
+ public ContentHandler { |
+ public: |
+ TestContentHandler() : app_(nullptr) {} |
+ ~TestContentHandler() override {} |
+ |
+ private: |
+ // Overridden from ApplicationDelegate: |
+ void Initialize(ApplicationImpl* app) override { |
+ app_ = app; |
+ } |
+ bool ConfigureIncomingConnection(ApplicationConnection* connection) override { |
+ connection->AddService<ContentHandler>(this); |
+ return true; |
+ } |
+ |
+ // Overridden from InterfaceFactory<ContentHandler>: |
+ void Create(ApplicationConnection* connection, |
+ InterfaceRequest<ContentHandler> request) override { |
+ bindings_.AddBinding(this, request.Pass()); |
+ } |
+ |
+ // Overridden from ContentHandler: |
+ void StartApplication(InterfaceRequest<Application> application, |
+ URLResponsePtr response) override { |
+ scoped_ptr<ApplicationDelegate> delegate(new shell::test::TestApplication); |
+ embedded_apps_.push_back( |
+ new ApplicationImpl(delegate.get(), application.Pass())); |
+ embedded_app_delegates_.push_back(delegate.Pass()); |
+ } |
+ |
+ ApplicationImpl* app_; |
+ WeakBindingSet<ContentHandler> bindings_; |
+ ScopedVector<ApplicationDelegate> embedded_app_delegates_; |
+ ScopedVector<ApplicationImpl> embedded_apps_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(TestContentHandler); |
+}; |
+ |
+} // namespace |
+ |
+class CapabilityFilterContentHandlerTest |
+ : public shell::test::CapabilityFilterTest { |
+ public: |
+ CapabilityFilterContentHandlerTest() |
+ : package_manager_(nullptr) { |
+ base::FilePath shell_dir; |
+ PathService::Get(base::DIR_MODULE, &shell_dir); |
+ package_manager_ = new TestPackageManager(shell_dir); |
+ } |
+ ~CapabilityFilterContentHandlerTest() override {} |
+ |
+ private: |
+ // Overridden from CapabilityFilterTest: |
+ shell::PackageManager* CreatePackageManager() override { |
+ return package_manager_; |
+ } |
+ void SetUp() override { |
+ shell::test::CapabilityFilterTest::SetUp(); |
+ |
+ GURL content_handler_url("test:content_handler"); |
+ package_manager_->RegisterContentHandler(kTestMimeType, |
+ content_handler_url); |
+ CreateLoader<TestContentHandler>(content_handler_url.spec()); |
+ } |
+ |
+ // Owned by ApplicationManager in base class. |
+ PackageManagerImpl* package_manager_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(CapabilityFilterContentHandlerTest); |
+}; |
+ |
+TEST_F(CapabilityFilterContentHandlerTest, Blocking) { |
+ RunBlockingTest(); |
+} |
+ |
+TEST_F(CapabilityFilterContentHandlerTest, Wildcards) { |
+ RunWildcardTest(); |
+} |
+ |
+} // namespace test |
+} // namespace package_manager |
+} // namespace mojo |