diff options
Diffstat (limited to 'mojo/services/view_manager')
17 files changed, 116 insertions, 49 deletions
diff --git a/mojo/services/view_manager/public/cpp/DEPS b/mojo/services/view_manager/public/cpp/DEPS index 84b6bb7..c08c2c8 100644 --- a/mojo/services/view_manager/public/cpp/DEPS +++ b/mojo/services/view_manager/public/cpp/DEPS @@ -1,8 +1,14 @@ include_rules = [ - "!base", "+geometry/public", "+input_events/public", "+surfaces/public", "+view_manager/public", "+window_manager/public", + + # TODO(blundell): Eliminate these dependencies. crbug.com/451403 + "!base/basictypes.h", + "!base/bind.h", + "!base/compiler_specific.h", + "!base/memory/scoped_ptr.h", + "!base/observer_list.h", ] diff --git a/mojo/services/view_manager/public/cpp/lib/BUILD.gn b/mojo/services/view_manager/public/cpp/lib/BUILD.gn deleted file mode 100644 index 2090455..0000000 --- a/mojo/services/view_manager/public/cpp/lib/BUILD.gn +++ /dev/null @@ -1,23 +0,0 @@ -# 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. - -import("//build/config/ui.gni") - -source_set("run_unittests") { - testonly = true - sources = [ - "view_manager_test_suite.cc", - "view_manager_test_suite.h", - "view_manager_unittests.cc", - ] - - deps = [ - "//base", - "//base/test:test_support", - ] - - if (use_x11) { - deps += [ "//ui/gfx/x" ] - } -} diff --git a/mojo/services/view_manager/public/cpp/lib/DEPS b/mojo/services/view_manager/public/cpp/lib/DEPS index d4de534..f36ebc7 100644 --- a/mojo/services/view_manager/public/cpp/lib/DEPS +++ b/mojo/services/view_manager/public/cpp/lib/DEPS @@ -1,11 +1,10 @@ include_rules = [ "+mojo/services/window_manager/public", -] -specific_include_rules = { - "view_manager_test_suite.cc": [ - "!mojo/services/native_viewport/native_viewport.h", - "!ui/gfx", - "!ui/gl", - ], -} + # TODO(blundell): Eliminate these dependencies. crbug.com/451403 + "!base/callback.h", + "!base/memory/scoped_vector.h", + "!base/memory/weak_ptr.h", + "!base/message_loop/message_loop.h", + "!base/stl_util.h", +] diff --git a/mojo/services/view_manager/public/cpp/lib/view.cc b/mojo/services/view_manager/public/cpp/lib/view.cc index 929eec4..f7e7784 100644 --- a/mojo/services/view_manager/public/cpp/lib/view.cc +++ b/mojo/services/view_manager/public/cpp/lib/view.cc @@ -5,6 +5,7 @@ #include "view_manager/public/cpp/view.h" #include <set> +#include <string> #include "mojo/public/cpp/application/service_provider_impl.h" #include "view_manager/public/cpp/lib/view_manager_client_impl.h" @@ -247,6 +248,18 @@ void View::SetSharedProperty(const std::string& name, properties_.erase(it); } + // TODO: add test coverage of this (450303). + if (manager_) { + Array<uint8_t> transport_value; + if (value) { + transport_value.resize(value->size()); + if (value->size()) + memcpy(&transport_value.front(), &(value->front()), value->size()); + } + static_cast<ViewManagerClientImpl*>(manager_)->SetProperty( + id_, name, transport_value.Pass()); + } + FOR_EACH_OBSERVER( ViewObserver, observers_, OnViewSharedPropertyChanged(this, name, old_value_ptr, value)); @@ -369,10 +382,20 @@ void View::Embed(const String& url, //////////////////////////////////////////////////////////////////////////////// // View, protected: +namespace { + +ViewportMetricsPtr CreateEmptyViewportMetrics() { + ViewportMetricsPtr metrics = ViewportMetrics::New(); + metrics->size = Size::New(); + return metrics; +} +} + View::View() : manager_(NULL), id_(static_cast<Id>(-1)), parent_(NULL), + viewport_metrics_(CreateEmptyViewportMetrics()), visible_(true), drawn_(false) { } @@ -412,6 +435,7 @@ View::View(ViewManager* manager, Id id) : manager_(manager), id_(id), parent_(nullptr), + viewport_metrics_(CreateEmptyViewportMetrics()), visible_(false), drawn_(false) { } @@ -476,6 +500,15 @@ void View::LocalSetBounds(const Rect& old_bounds, bounds_ = new_bounds; } +void View::LocalSetViewportMetrics(const ViewportMetrics& old_metrics, + const ViewportMetrics& new_metrics) { + // TODO(eseidel): We could check old_metrics against viewport_metrics_. + viewport_metrics_ = new_metrics.Clone(); + FOR_EACH_OBSERVER( + ViewObserver, observers_, + OnViewViewportMetricsChanged(this, old_metrics, new_metrics)); +} + void View::LocalSetDrawn(bool value) { if (drawn_ == value) return; diff --git a/mojo/services/view_manager/public/cpp/lib/view_manager_client_impl.cc b/mojo/services/view_manager/public/cpp/lib/view_manager_client_impl.cc index 78daeb3..595e039 100644 --- a/mojo/services/view_manager/public/cpp/lib/view_manager_client_impl.cc +++ b/mojo/services/view_manager/public/cpp/lib/view_manager_client_impl.cc @@ -36,7 +36,8 @@ View* AddViewToViewManager(ViewManagerClientImpl* client, private_view.set_id(view_data->view_id); private_view.set_visible(view_data->visible); private_view.set_drawn(view_data->drawn); - private_view.set_viewport_metrics(view_data->viewport_metrics.Pass()); + private_view.LocalSetViewportMetrics(ViewportMetrics(), + *view_data->viewport_metrics); private_view.set_properties( view_data->properties.To<std::map<std::string, std::vector<uint8_t>>>()); client->AddView(view); @@ -296,6 +297,26 @@ void ViewManagerClientImpl::OnViewBoundsChanged(Id view_id, ViewPrivate(view).LocalSetBounds(*old_bounds, *new_bounds); } +namespace { + +void SetViewportMetricsOnDecendants(View* root, + const ViewportMetrics& old_metrics, + const ViewportMetrics& new_metrics) { + ViewPrivate(root).LocalSetViewportMetrics(old_metrics, new_metrics); + const View::Children& children = root->children(); + for (size_t i = 0; i < children.size(); ++i) + SetViewportMetricsOnDecendants(children[i], old_metrics, new_metrics); +} +} + +void ViewManagerClientImpl::OnViewViewportMetricsChanged( + ViewportMetricsPtr old_metrics, + ViewportMetricsPtr new_metrics) { + View* view = GetRoot(); + if (view) + SetViewportMetricsOnDecendants(view, *old_metrics, *new_metrics); +} + void ViewManagerClientImpl::OnViewHierarchyChanged( Id view_id, Id new_parent_id, diff --git a/mojo/services/view_manager/public/cpp/lib/view_manager_client_impl.h b/mojo/services/view_manager/public/cpp/lib/view_manager_client_impl.h index c8ae5c4..2405229 100644 --- a/mojo/services/view_manager/public/cpp/lib/view_manager_client_impl.h +++ b/mojo/services/view_manager/public/cpp/lib/view_manager_client_impl.h @@ -103,6 +103,8 @@ class ViewManagerClientImpl : public ViewManager, void OnViewBoundsChanged(Id view_id, RectPtr old_bounds, RectPtr new_bounds) override; + void OnViewViewportMetricsChanged(ViewportMetricsPtr old_metrics, + ViewportMetricsPtr new_metrics) override; void OnViewHierarchyChanged(Id view_id, Id new_parent_id, Id old_parent_id, diff --git a/mojo/services/view_manager/public/cpp/lib/view_private.cc b/mojo/services/view_manager/public/cpp/lib/view_private.cc index 395aacf..20232e8 100644 --- a/mojo/services/view_manager/public/cpp/lib/view_private.cc +++ b/mojo/services/view_manager/public/cpp/lib/view_private.cc @@ -8,6 +8,7 @@ namespace mojo { ViewPrivate::ViewPrivate(View* view) : view_(view) { + CHECK(view); } ViewPrivate::~ViewPrivate() { diff --git a/mojo/services/view_manager/public/cpp/lib/view_private.h b/mojo/services/view_manager/public/cpp/lib/view_private.h index 964e6e5..1c54567 100644 --- a/mojo/services/view_manager/public/cpp/lib/view_private.h +++ b/mojo/services/view_manager/public/cpp/lib/view_private.h @@ -39,8 +39,9 @@ class ViewPrivate { view_->properties_ = data; } - void set_viewport_metrics(ViewportMetricsPtr viewport_metrics) { - view_->viewport_metrics_ = viewport_metrics.Pass(); + void LocalSetViewportMetrics(const ViewportMetrics& old_metrics, + const ViewportMetrics& new_metrics) { + view_->LocalSetViewportMetrics(new_metrics, new_metrics); } void LocalDestroy() { diff --git a/mojo/services/view_manager/public/cpp/tests/BUILD.gn b/mojo/services/view_manager/public/cpp/tests/BUILD.gn index 2cbcf43..e912084 100644 --- a/mojo/services/view_manager/public/cpp/tests/BUILD.gn +++ b/mojo/services/view_manager/public/cpp/tests/BUILD.gn @@ -7,23 +7,27 @@ import("//testing/test.gni") test("mojo_view_manager_lib_unittests") { sources = [ - "view_unittest.cc", + "view_manager_test_suite.cc", + "view_manager_test_suite.h", "view_manager_unittest.cc", + "view_manager_unittests.cc", + "view_unittest.cc", ] deps = [ "//base", "//base/test:test_support", - "//mojo/converters/geometry", - "//mojo/environment:chromium", "//mojo/public/cpp/application", "//mojo/services/geometry/public/cpp", "//mojo/services/geometry/public/interfaces", "//mojo/services/view_manager/public/cpp", - "//mojo/services/view_manager/public/cpp/lib:run_unittests", "//mojo/services/view_manager/public/interfaces", "//shell/application_manager", "//shell:test_support", "//testing/gtest", ] + + if (use_x11) { + deps += [ "//ui/gfx/x" ] + } } diff --git a/mojo/services/view_manager/public/cpp/tests/DEPS b/mojo/services/view_manager/public/cpp/tests/DEPS index af27b9a..0f9ddb4 100644 --- a/mojo/services/view_manager/public/cpp/tests/DEPS +++ b/mojo/services/view_manager/public/cpp/tests/DEPS @@ -1,5 +1,16 @@ include_rules = [ + "+mojo/services/geometry/public", + + # TODO(blundell): Determine whether to eliminate these dependencies or move + # the tests outside of view_manager's public code. crbug.com/451403 + "!base/auto_reset.h", + "!base/bind.h", + "!base/i18n/icu_util.h", + "!base/logging.h", + "!base/strings/stringprintf.h", + "!base/test/launcher/unit_test_launcher.h", + "!base/test/test_suite.h", "!shell/application_manager", "!shell/shell_test_helper.h", - "+mojo/services/geometry/public", + "!ui/gfx/x/x11_connection.h", ] diff --git a/mojo/services/view_manager/public/cpp/lib/view_manager_test_suite.cc b/mojo/services/view_manager/public/cpp/tests/view_manager_test_suite.cc index 93a221e..2bfdd1e 100644 --- a/mojo/services/view_manager/public/cpp/lib/view_manager_test_suite.cc +++ b/mojo/services/view_manager/public/cpp/tests/view_manager_test_suite.cc @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "mojo/services/view_manager/public/cpp/lib/view_manager_test_suite.h" +#include "mojo/services/view_manager/public/cpp/tests/view_manager_test_suite.h" #include "base/i18n/icu_util.h" diff --git a/mojo/services/view_manager/public/cpp/lib/view_manager_test_suite.h b/mojo/services/view_manager/public/cpp/tests/view_manager_test_suite.h index ec5bb88..ef81661 100644 --- a/mojo/services/view_manager/public/cpp/lib/view_manager_test_suite.h +++ b/mojo/services/view_manager/public/cpp/tests/view_manager_test_suite.h @@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef MOJO_SERVICES_VIEW_MANAGER_PUBLIC_CPP_LIB_VIEW_MANAGER_TEST_SUITE_H_ -#define MOJO_SERVICES_VIEW_MANAGER_PUBLIC_CPP_LIB_VIEW_MANAGER_TEST_SUITE_H_ +#ifndef MOJO_SERVICES_VIEW_MANAGER_PUBLIC_CPP_TESTS_VIEW_MANAGER_TEST_SUITE_H_ +#define MOJO_SERVICES_VIEW_MANAGER_PUBLIC_CPP_TESTS_VIEW_MANAGER_TEST_SUITE_H_ #include "base/test/test_suite.h" @@ -23,4 +23,4 @@ class ViewManagerTestSuite : public base::TestSuite { } // namespace mojo -#endif // MOJO_SERVICES_VIEW_MANAGER_PUBLIC_CPP_LIB_VIEW_MANAGER_TEST_SUITE_H_ +#endif // MOJO_SERVICES_VIEW_MANAGER_PUBLIC_CPP_TESTS_VIEW_MANAGER_TEST_SUITE_H_ diff --git a/mojo/services/view_manager/public/cpp/tests/view_manager_unittest.cc b/mojo/services/view_manager/public/cpp/tests/view_manager_unittest.cc index d9e4db8..bc69464 100644 --- a/mojo/services/view_manager/public/cpp/tests/view_manager_unittest.cc +++ b/mojo/services/view_manager/public/cpp/tests/view_manager_unittest.cc @@ -63,11 +63,11 @@ class ConnectApplicationLoader : public ApplicationLoader, // Overridden from ApplicationLoader: void Load(ApplicationManager* manager, const GURL& url, - ScopedMessagePipeHandle shell_handle, + InterfaceRequest<Application> application_request, LoadCallback callback) override { - ASSERT_TRUE(shell_handle.is_valid()); + ASSERT_TRUE(application_request.is_pending()); scoped_ptr<ApplicationImpl> app( - new ApplicationImpl(this, shell_handle.Pass())); + new ApplicationImpl(this, application_request.Pass())); apps_.push_back(app.release()); } diff --git a/mojo/services/view_manager/public/cpp/lib/view_manager_unittests.cc b/mojo/services/view_manager/public/cpp/tests/view_manager_unittests.cc index 1d8bd98..95a7b5c 100644 --- a/mojo/services/view_manager/public/cpp/lib/view_manager_unittests.cc +++ b/mojo/services/view_manager/public/cpp/tests/view_manager_unittests.cc @@ -4,7 +4,7 @@ #include "base/bind.h" #include "base/test/launcher/unit_test_launcher.h" -#include "mojo/services/view_manager/public/cpp/lib/view_manager_test_suite.h" +#include "mojo/services/view_manager/public/cpp/tests/view_manager_test_suite.h" int main(int argc, char** argv) { mojo::ViewManagerTestSuite test_suite(argc, argv); diff --git a/mojo/services/view_manager/public/cpp/view.h b/mojo/services/view_manager/public/cpp/view.h index 1215a3b..07bc5b0 100644 --- a/mojo/services/view_manager/public/cpp/view.h +++ b/mojo/services/view_manager/public/cpp/view.h @@ -153,6 +153,8 @@ class View { // Returns true if the order actually changed. bool LocalReorder(View* relative, OrderDirection direction); void LocalSetBounds(const Rect& old_bounds, const Rect& new_bounds); + void LocalSetViewportMetrics(const ViewportMetrics& old_metrics, + const ViewportMetrics& new_metrics); void LocalSetDrawn(bool drawn); // Methods implementing visibility change notifications. See ViewObserver diff --git a/mojo/services/view_manager/public/cpp/view_observer.h b/mojo/services/view_manager/public/cpp/view_observer.h index 4c0ba87..7430566 100644 --- a/mojo/services/view_manager/public/cpp/view_observer.h +++ b/mojo/services/view_manager/public/cpp/view_observer.h @@ -56,6 +56,11 @@ class ViewObserver { const Rect& old_bounds, const Rect& new_bounds) {} + virtual void OnViewViewportMetricsChanged(View* view, + const ViewportMetrics& old_bounds, + const ViewportMetrics& new_bounds) { + } + virtual void OnCaptureChanged(View* gained_capture, View* lost_capture) {} virtual void OnViewFocusChanged(View* gained_focus, View* lost_focus) {} virtual void OnViewActivationChanged(View* gained_active, View* lost_active) { diff --git a/mojo/services/view_manager/public/interfaces/view_manager.mojom b/mojo/services/view_manager/public/interfaces/view_manager.mojom index 55552f8..23238d5 100644 --- a/mojo/services/view_manager/public/interfaces/view_manager.mojom +++ b/mojo/services/view_manager/public/interfaces/view_manager.mojom @@ -159,6 +159,11 @@ interface ViewManagerClient { mojo.Rect old_bounds, mojo.Rect new_bounds); + // Invoked when the viewport metrics for the view have changed. + // Clients are expected to propagate this to the view tree. + OnViewViewportMetricsChanged(mojo.ViewportMetrics old_metrics, + mojo.ViewportMetrics new_metrics); + // Invoked when a change is done to the hierarchy. A value of 0 is used to // identify a null view. For example, if the old_parent is NULL, 0 is // supplied. @@ -173,7 +178,7 @@ interface ViewManagerClient { // Invoked when the order of views within a parent changes. OnViewReordered(uint32 view_id, uint32 relative_view_id, - OrderDirection direction); + OrderDirection direction); // Invoked when a view is deleted. OnViewDeleted(uint32 view); |