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

Side by Side Diff: mojo/services/public/cpp/view_manager/lib/view_manager_synchronizer.cc

Issue 296133012: Some security checks around destruction/setting bounds. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 7 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "mojo/services/public/cpp/view_manager/lib/view_manager_synchronizer.h" 5 #include "mojo/services/public/cpp/view_manager/lib/view_manager_synchronizer.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/run_loop.h" 8 #include "base/run_loop.h"
9 #include "mojo/public/cpp/shell/connect.h" 9 #include "mojo/public/cpp/shell/connect.h"
10 #include "mojo/public/interfaces/shell/shell.mojom.h" 10 #include "mojo/public/interfaces/shell/shell.mojom.h"
11 #include "mojo/services/public/cpp/view_manager/lib/view_manager_private.h" 11 #include "mojo/services/public/cpp/view_manager/lib/view_manager_private.h"
12 #include "mojo/services/public/cpp/view_manager/lib/view_private.h" 12 #include "mojo/services/public/cpp/view_manager/lib/view_private.h"
13 #include "mojo/services/public/cpp/view_manager/lib/view_tree_node_private.h" 13 #include "mojo/services/public/cpp/view_manager/lib/view_tree_node_private.h"
14 #include "mojo/services/public/cpp/view_manager/util.h" 14 #include "mojo/services/public/cpp/view_manager/util.h"
15 15
16 namespace mojo { 16 namespace mojo {
17 namespace view_manager { 17 namespace view_manager {
18 18
19 uint32_t MakeTransportId(uint16_t connection_id, uint16_t local_id) { 19 uint32_t MakeTransportId(uint16_t connection_id, uint16_t local_id) {
20 return (connection_id << 16) | local_id; 20 return (connection_id << 16) | local_id;
21 } 21 }
22 22
23 // Helper called to construct a local node/view object from transport data. 23 // Helper called to construct a local node/view object from transport data.
24 ViewTreeNode* AddNodeToViewManager(ViewManager* manager, 24 ViewTreeNode* AddNodeToViewManager(ViewManager* manager,
25 ViewTreeNode* parent, 25 ViewTreeNode* parent,
26 TransportNodeId node_id, 26 TransportNodeId node_id,
27 TransportViewId view_id) { 27 TransportViewId view_id,
28 const gfx::Rect& bounds) {
28 // We don't use the ctor that takes a ViewManager here, since it will call 29 // We don't use the ctor that takes a ViewManager here, since it will call
29 // back to the service and attempt to create a new node. 30 // back to the service and attempt to create a new node.
30 ViewTreeNode* node = ViewTreeNodePrivate::LocalCreate(); 31 ViewTreeNode* node = ViewTreeNodePrivate::LocalCreate();
31 ViewTreeNodePrivate private_node(node); 32 ViewTreeNodePrivate private_node(node);
32 private_node.set_view_manager(manager); 33 private_node.set_view_manager(manager);
33 private_node.set_id(node_id); 34 private_node.set_id(node_id);
35 private_node.LocalSetBounds(gfx::Rect(), bounds);
34 if (parent) 36 if (parent)
35 ViewTreeNodePrivate(parent).LocalAddChild(node); 37 ViewTreeNodePrivate(parent).LocalAddChild(node);
36 ViewManagerPrivate private_manager(manager); 38 ViewManagerPrivate private_manager(manager);
37 private_manager.AddNode(node->id(), node); 39 private_manager.AddNode(node->id(), node);
38 40
39 // View. 41 // View.
40 if (view_id != 0) { 42 if (view_id != 0) {
41 View* view = ViewPrivate::LocalCreate(); 43 View* view = ViewPrivate::LocalCreate();
42 ViewPrivate private_view(view); 44 ViewPrivate private_view(view);
43 private_view.set_view_manager(manager); 45 private_view.set_view_manager(manager);
(...skipping 16 matching lines...) Expand all
60 if (last_node && nodes[i].parent_id() == last_node->id()) { 62 if (last_node && nodes[i].parent_id() == last_node->id()) {
61 parents.push_back(last_node); 63 parents.push_back(last_node);
62 } else if (!parents.empty()) { 64 } else if (!parents.empty()) {
63 while (parents.back()->id() != nodes[i].parent_id()) 65 while (parents.back()->id() != nodes[i].parent_id())
64 parents.pop_back(); 66 parents.pop_back();
65 } 67 }
66 ViewTreeNode* node = AddNodeToViewManager( 68 ViewTreeNode* node = AddNodeToViewManager(
67 manager, 69 manager,
68 !parents.empty() ? parents.back() : NULL, 70 !parents.empty() ? parents.back() : NULL,
69 nodes[i].node_id(), 71 nodes[i].node_id(),
70 nodes[i].view_id()); 72 nodes[i].view_id(),
73 nodes[i].bounds());
71 if (!last_node) 74 if (!last_node)
72 root = node; 75 root = node;
73 last_node = node; 76 last_node = node;
74 } 77 }
75 return root; 78 return root;
76 } 79 }
77 80
78 class ViewManagerTransaction { 81 class ViewManagerTransaction {
79 public: 82 public:
80 virtual ~ViewManagerTransaction() {} 83 virtual ~ViewManagerTransaction() {}
(...skipping 458 matching lines...) Expand 10 before | Expand all | Expand 10 after
539 void ViewManagerSynchronizer::RemoveFromPendingQueue( 542 void ViewManagerSynchronizer::RemoveFromPendingQueue(
540 ViewManagerTransaction* transaction) { 543 ViewManagerTransaction* transaction) {
541 DCHECK_EQ(transaction, pending_transactions_.front()); 544 DCHECK_EQ(transaction, pending_transactions_.front());
542 pending_transactions_.erase(pending_transactions_.begin()); 545 pending_transactions_.erase(pending_transactions_.begin());
543 if (pending_transactions_.empty() && !changes_acked_callback_.is_null()) 546 if (pending_transactions_.empty() && !changes_acked_callback_.is_null())
544 changes_acked_callback_.Run(); 547 changes_acked_callback_.Run();
545 } 548 }
546 549
547 } // namespace view_manager 550 } // namespace view_manager
548 } // namespace mojo 551 } // namespace mojo
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698