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

Unified Diff: mojo/services/window_manager/window_manager_apptest.cc

Issue 1049993002: Get mojo_shell building inside chromium checkout. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix presubmit Created 5 years, 9 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: mojo/services/window_manager/window_manager_apptest.cc
diff --git a/mojo/services/window_manager/window_manager_apptest.cc b/mojo/services/window_manager/window_manager_apptest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..12a9aca9ff7b6f28c45e8276a6db9e00fe8aceda
--- /dev/null
+++ b/mojo/services/window_manager/window_manager_apptest.cc
@@ -0,0 +1,212 @@
+// Copyright 2014 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/bind.h"
+#include "base/run_loop.h"
+#include "mojo/public/cpp/application/application_delegate.h"
+#include "mojo/public/cpp/application/application_impl.h"
+#include "mojo/public/cpp/application/application_test_base.h"
+#include "mojo/public/cpp/application/service_provider_impl.h"
+#include "mojo/public/cpp/system/macros.h"
+#include "third_party/mojo_services/src/view_manager/public/cpp/view.h"
+#include "third_party/mojo_services/src/view_manager/public/cpp/view_manager_client_factory.h"
+#include "third_party/mojo_services/src/view_manager/public/cpp/view_manager_delegate.h"
+#include "third_party/mojo_services/src/window_manager/public/interfaces/window_manager.mojom.h"
+
+namespace mojo {
+namespace {
+
+// TestApplication's view is embedded by the window manager.
+class TestApplication : public ApplicationDelegate, public ViewManagerDelegate {
+ public:
+ TestApplication() : root_(nullptr) {}
+ ~TestApplication() override {}
+
+ View* root() const { return root_; }
+
+ void set_embed_callback(const base::Closure& callback) {
+ embed_callback_ = callback;
+ }
+
+ private:
+ // ApplicationDelegate:
+ void Initialize(ApplicationImpl* app) override {
+ view_manager_client_factory_.reset(
+ new ViewManagerClientFactory(app->shell(), this));
+ }
+
+ bool ConfigureIncomingConnection(ApplicationConnection* connection) override {
+ connection->AddService(view_manager_client_factory_.get());
+ return true;
+ }
+
+ // ViewManagerDelegate:
+ void OnEmbed(View* root,
+ InterfaceRequest<ServiceProvider> services,
+ ServiceProviderPtr exposed_services) override {
+ root_ = root;
+ embed_callback_.Run();
+ }
+ void OnViewManagerDisconnected(ViewManager* view_manager) override {}
+
+ View* root_;
+ base::Closure embed_callback_;
+ scoped_ptr<ViewManagerClientFactory> view_manager_client_factory_;
+
+ MOJO_DISALLOW_COPY_AND_ASSIGN(TestApplication);
+};
+
+class TestWindowManagerObserver : public WindowManagerObserver {
+ public:
+ explicit TestWindowManagerObserver(
+ InterfaceRequest<WindowManagerObserver> observer_request)
+ : binding_(this, observer_request.Pass()) {}
+ ~TestWindowManagerObserver() override {}
+
+ private:
+ // Overridden from WindowManagerClient:
+ void OnCaptureChanged(Id new_capture_node_id) override {}
+ void OnFocusChanged(Id focused_node_id) override {}
+ void OnActiveWindowChanged(Id active_window) override {}
+
+ Binding<WindowManagerObserver> binding_;
+
+ DISALLOW_COPY_AND_ASSIGN(TestWindowManagerObserver);
+};
+
+class WindowManagerApplicationTest : public test::ApplicationTestBase {
+ public:
+ WindowManagerApplicationTest() {}
+ ~WindowManagerApplicationTest() override {}
+
+ protected:
+ // ApplicationTestBase:
+ void SetUp() override {
+ ApplicationTestBase::SetUp();
+ application_impl()->ConnectToService("mojo:window_manager",
+ &window_manager_);
+ }
+ ApplicationDelegate* GetApplicationDelegate() override {
+ return &test_application_;
+ }
+
+ void EmbedApplicationWithURL(const std::string& url) {
+ window_manager_->Embed(url, nullptr, nullptr);
+
+ base::RunLoop run_loop;
+ test_application_.set_embed_callback(run_loop.QuitClosure());
+ run_loop.Run();
+ }
+
+ WindowManagerPtr window_manager_;
+ TestApplication test_application_;
+
+ private:
+ MOJO_DISALLOW_COPY_AND_ASSIGN(WindowManagerApplicationTest);
+};
+
+TEST_F(WindowManagerApplicationTest, Embed) {
+ EXPECT_EQ(nullptr, test_application_.root());
+ EmbedApplicationWithURL(application_impl()->url());
+ EXPECT_NE(nullptr, test_application_.root());
+}
+
+struct BoolCallback {
+ BoolCallback(bool* bool_value, base::RunLoop* run_loop)
+ : bool_value(bool_value), run_loop(run_loop) {}
+
+ void Run(bool value) const {
+ *bool_value = value;
+ run_loop->Quit();
+ }
+
+ bool* bool_value;
+ base::RunLoop* run_loop;
+};
+
+TEST_F(WindowManagerApplicationTest, SetCaptureFailsFromNonVM) {
+ EmbedApplicationWithURL(application_impl()->url());
+ bool callback_value = true;
+ base::RunLoop run_loop;
+ window_manager_->SetCapture(test_application_.root()->id(),
+ BoolCallback(&callback_value, &run_loop));
+ run_loop.Run();
+ // This call only succeeds for WindowManager connections from the ViewManager.
+ EXPECT_FALSE(callback_value);
+}
+
+TEST_F(WindowManagerApplicationTest, FocusWindowFailsFromNonVM) {
+ EmbedApplicationWithURL(application_impl()->url());
+ bool callback_value = true;
+ base::RunLoop run_loop;
+ window_manager_->FocusWindow(test_application_.root()->id(),
+ BoolCallback(&callback_value, &run_loop));
+ run_loop.Run();
+ // This call only succeeds for WindowManager connections from the ViewManager.
+ EXPECT_FALSE(callback_value);
+}
+
+TEST_F(WindowManagerApplicationTest, ActivateWindowFailsFromNonVM) {
+ EmbedApplicationWithURL(application_impl()->url());
+ bool callback_value = true;
+ base::RunLoop run_loop;
+ window_manager_->ActivateWindow(test_application_.root()->id(),
+ BoolCallback(&callback_value, &run_loop));
+ run_loop.Run();
+ // This call only succeeds for WindowManager connections from the ViewManager.
+ EXPECT_FALSE(callback_value);
+}
+
+struct FocusedAndActiveViewsCallback {
+ FocusedAndActiveViewsCallback(uint32* capture_view_id,
+ uint32* focused_view_id,
+ uint32* active_view_id,
+ base::RunLoop* run_loop)
+ : capture_view_id(capture_view_id),
+ focused_view_id(focused_view_id),
+ active_view_id(active_view_id),
+ run_loop(run_loop) {
+ }
+
+ void Run(uint32 capture, uint32 focused, uint32 active) const {
+ *capture_view_id = capture;
+ *focused_view_id = focused;
+ *active_view_id = active;
+ run_loop->Quit();
+ }
+
+ uint32* capture_view_id;
+ uint32* focused_view_id;
+ uint32* active_view_id;
+ base::RunLoop* run_loop;
+};
+
+TEST_F(WindowManagerApplicationTest, GetFocusedAndActiveViewsFailsWithoutFC) {
+ EmbedApplicationWithURL(application_impl()->url());
+ uint32 capture_view_id = -1;
+ uint32 focused_view_id = -1;
+ uint32 active_view_id = -1;
+ base::RunLoop run_loop;
+
+ WindowManagerObserverPtr observer;
+ scoped_ptr<TestWindowManagerObserver> window_manager_observer(
+ new TestWindowManagerObserver(GetProxy(&observer)));
+
+ window_manager_->GetFocusedAndActiveViews(
+ observer.Pass(),
+ FocusedAndActiveViewsCallback(&capture_view_id,
+ &focused_view_id,
+ &active_view_id,
+ &run_loop));
+ run_loop.Run();
+ // This call fails if the WindowManager does not have a FocusController.
+ EXPECT_EQ(0u, capture_view_id);
+ EXPECT_EQ(0u, focused_view_id);
+ EXPECT_EQ(0u, active_view_id);
+}
+
+// TODO(msw): Write tests exercising other WindowManager functionality.
+
+} // namespace
+} // namespace mojo
« no previous file with comments | « mojo/services/window_manager/window_manager_app_win.cc ('k') | mojo/services/window_manager/window_manager_delegate.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698