summaryrefslogtreecommitdiffstats
path: root/mojo/services/view_manager
diff options
context:
space:
mode:
Diffstat (limited to 'mojo/services/view_manager')
-rw-r--r--mojo/services/view_manager/public/cpp/DEPS8
-rw-r--r--mojo/services/view_manager/public/cpp/lib/BUILD.gn23
-rw-r--r--mojo/services/view_manager/public/cpp/lib/DEPS15
-rw-r--r--mojo/services/view_manager/public/cpp/lib/view.cc33
-rw-r--r--mojo/services/view_manager/public/cpp/lib/view_manager_client_impl.cc23
-rw-r--r--mojo/services/view_manager/public/cpp/lib/view_manager_client_impl.h2
-rw-r--r--mojo/services/view_manager/public/cpp/lib/view_private.cc1
-rw-r--r--mojo/services/view_manager/public/cpp/lib/view_private.h5
-rw-r--r--mojo/services/view_manager/public/cpp/tests/BUILD.gn12
-rw-r--r--mojo/services/view_manager/public/cpp/tests/DEPS13
-rw-r--r--mojo/services/view_manager/public/cpp/tests/view_manager_test_suite.cc (renamed from mojo/services/view_manager/public/cpp/lib/view_manager_test_suite.cc)2
-rw-r--r--mojo/services/view_manager/public/cpp/tests/view_manager_test_suite.h (renamed from mojo/services/view_manager/public/cpp/lib/view_manager_test_suite.h)6
-rw-r--r--mojo/services/view_manager/public/cpp/tests/view_manager_unittest.cc6
-rw-r--r--mojo/services/view_manager/public/cpp/tests/view_manager_unittests.cc (renamed from mojo/services/view_manager/public/cpp/lib/view_manager_unittests.cc)2
-rw-r--r--mojo/services/view_manager/public/cpp/view.h2
-rw-r--r--mojo/services/view_manager/public/cpp/view_observer.h5
-rw-r--r--mojo/services/view_manager/public/interfaces/view_manager.mojom7
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);