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

Side by Side Diff: ash/common/devtools/ash_devtools_unittest.cc

Issue 2537163002: Hook up views/widgets to AshDevToolsDOMAgent (Closed)
Patch Set: sadruls comments Created 4 years 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
« no previous file with comments | « ash/common/devtools/ash_devtools_dom_agent.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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 "ash/common/devtools/ash_devtools_dom_agent.h" 5 #include "ash/common/devtools/ash_devtools_dom_agent.h"
6 6
7 #include "ash/common/test/ash_test.h" 7 #include "ash/common/test/ash_test.h"
8 #include "ash/common/wm_lookup.h" 8 #include "ash/common/wm_lookup.h"
9 #include "ash/common/wm_root_window_controller.h"
9 #include "ash/common/wm_shell.h" 10 #include "ash/common/wm_shell.h"
10 #include "ash/common/wm_window.h" 11 #include "ash/common/wm_window.h"
11 #include "base/strings/stringprintf.h" 12 #include "base/strings/stringprintf.h"
13 #include "ui/views/widget/native_widget_private.h"
12 #include "ui/views/widget/widget.h" 14 #include "ui/views/widget/widget.h"
13 15
14 namespace ash { 16 namespace ash {
15 namespace { 17 namespace {
16 using namespace ui::devtools::protocol; 18 using namespace ui::devtools::protocol;
17 const int kDefaultChildNodeCount = -1; 19 const int kDefaultChildNodeCount = -1;
18 20
19 class TestView : public views::View { 21 class TestView : public views::View {
20 public: 22 public:
21 TestView(const char* name) : views::View(), name_(name) {} 23 TestView(const char* name) : views::View(), name_(name) {}
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
113 return window_node; 115 return window_node;
114 } 116 }
115 117
116 } // namespace 118 } // namespace
117 119
118 class AshDevToolsTest : public AshTest { 120 class AshDevToolsTest : public AshTest {
119 public: 121 public:
120 AshDevToolsTest() {} 122 AshDevToolsTest() {}
121 ~AshDevToolsTest() override {} 123 ~AshDevToolsTest() override {}
122 124
125 views::internal::NativeWidgetPrivate* CreateTestNativeWidget() {
126 views::Widget* widget = new views::Widget;
127 views::Widget::InitParams params;
128 params.ownership = views::Widget::InitParams::NATIVE_WIDGET_OWNS_WIDGET;
129 WmShell::Get()
130 ->GetPrimaryRootWindow()
131 ->GetRootWindowController()
132 ->ConfigureWidgetInitParamsForContainer(
133 widget, kShellWindowId_DefaultContainer, &params);
134 widget->Init(params);
135 return widget->native_widget_private();
136 }
137
123 void SetUp() override { 138 void SetUp() override {
124 AshTest::SetUp(); 139 AshTest::SetUp();
125 fake_frontend_channel_ = base::MakeUnique<FakeFrontendChannel>(); 140 fake_frontend_channel_ = base::MakeUnique<FakeFrontendChannel>();
126 uber_dispatcher_ = 141 uber_dispatcher_ =
127 base::MakeUnique<UberDispatcher>(fake_frontend_channel_.get()); 142 base::MakeUnique<UberDispatcher>(fake_frontend_channel_.get());
128 dom_agent_ = 143 dom_agent_ =
129 base::MakeUnique<devtools::AshDevToolsDOMAgent>(WmShell::Get()); 144 base::MakeUnique<devtools::AshDevToolsDOMAgent>(WmShell::Get());
130 dom_agent_->Init(uber_dispatcher_.get()); 145 dom_agent_->Init(uber_dispatcher_.get());
131 } 146 }
132 147
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
189 DOM::Node* widget_node = parent_children->get(0); 204 DOM::Node* widget_node = parent_children->get(0);
190 Compare(widget.get(), widget_node); 205 Compare(widget.get(), widget_node);
191 Compare(child_window, parent_children->get(1)); 206 Compare(child_window, parent_children->get(1));
192 Array<DOM::Node>* widget_children = widget_node->getChildren(nullptr); 207 Array<DOM::Node>* widget_children = widget_node->getChildren(nullptr);
193 ASSERT_TRUE(widget_children); 208 ASSERT_TRUE(widget_children);
194 Compare(widget->GetRootView(), widget_children->get(0)); 209 Compare(widget->GetRootView(), widget_children->get(0));
195 ASSERT_TRUE(widget_children->get(0)->getChildren(nullptr)); 210 ASSERT_TRUE(widget_children->get(0)->getChildren(nullptr));
196 Compare(child_view, widget_children->get(0)->getChildren(nullptr)->get(1)); 211 Compare(child_view, widget_children->get(0)->getChildren(nullptr)->get(1));
197 } 212 }
198 213
214 TEST_F(AshDevToolsTest, GetDocumentNativeWidgetOwnsWidget) {
215 views::internal::NativeWidgetPrivate* native_widget_private =
216 CreateTestNativeWidget();
217 views::Widget* widget = native_widget_private->GetWidget();
218 WmWindow* parent_window = WmLookup::Get()->GetWindowForWidget(widget);
219
220 std::unique_ptr<ui::devtools::protocol::DOM::Node> root;
221 dom_agent()->getDocument(&root);
222
223 DOM::Node* parent_node = FindInRoot(parent_window, root.get());
224 ASSERT_TRUE(parent_node);
225 DOM::Node* widget_node = parent_node->getChildren(nullptr)->get(0);
226 Compare(widget, widget_node);
227 // Destroy NativeWidget followed by |widget|
228 widget->CloseNow();
229 }
230
199 TEST_F(AshDevToolsTest, WindowAddedChildNodeInserted) { 231 TEST_F(AshDevToolsTest, WindowAddedChildNodeInserted) {
200 // Initialize DOMAgent 232 // Initialize DOMAgent
201 std::unique_ptr<ui::devtools::protocol::DOM::Node> root; 233 std::unique_ptr<ui::devtools::protocol::DOM::Node> root;
202 dom_agent()->getDocument(&root); 234 dom_agent()->getDocument(&root);
203 235
204 WmWindow* parent_window = WmShell::Get()->GetPrimaryRootWindow(); 236 WmWindow* parent_window = WmShell::Get()->GetPrimaryRootWindow();
205 DOM::Node* parent_node = root->getChildren(nullptr)->get(0); 237 DOM::Node* parent_node = root->getChildren(nullptr)->get(0);
206 Array<DOM::Node>* parent_node_children = parent_node->getChildren(nullptr); 238 Array<DOM::Node>* parent_node_children = parent_node->getChildren(nullptr);
207 DOM::Node* sibling_node = 239 DOM::Node* sibling_node =
208 parent_node_children->get(parent_node_children->length() - 1); 240 parent_node_children->get(parent_node_children->length() - 1);
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
304 DOM::Node* sibling_node = parent_node_children->get(1); 336 DOM::Node* sibling_node = parent_node_children->get(1);
305 int parent_id = parent_node->getNodeId(); 337 int parent_id = parent_node->getNodeId();
306 338
307 Compare(parent_window, parent_node); 339 Compare(parent_window, parent_node);
308 Compare(child_window, child_node); 340 Compare(child_window, child_node);
309 parent_window->StackChildAbove(child_window, target_window); 341 parent_window->StackChildAbove(child_window, target_window);
310 ExpectChildNodeRemoved(parent_id, child_node->getNodeId()); 342 ExpectChildNodeRemoved(parent_id, child_node->getNodeId());
311 ExpectChildNodeInserted(parent_id, sibling_node->getNodeId()); 343 ExpectChildNodeInserted(parent_id, sibling_node->getNodeId());
312 } 344 }
313 345
346 TEST_F(AshDevToolsTest, ViewInserted) {
347 std::unique_ptr<views::Widget> widget(
348 CreateTestWidget(gfx::Rect(1, 1, 1, 1)));
349 WmWindow* window = WmLookup::Get()->GetWindowForWidget(widget.get());
350 widget->Show();
351
352 // Initialize DOMAgent
353 std::unique_ptr<ui::devtools::protocol::DOM::Node> root;
354 dom_agent()->getDocument(&root);
355
356 DOM::Node* parent_node = FindInRoot(window, root.get());
357 ASSERT_TRUE(parent_node);
358 DOM::Node* widget_node = parent_node->getChildren(nullptr)->get(0);
359 DOM::Node* root_view_node = widget_node->getChildren(nullptr)->get(0);
360 Array<DOM::Node>* root_view_children = root_view_node->getChildren(nullptr);
361 ASSERT_TRUE(root_view_children);
362 DOM::Node* sibling_view_node =
363 root_view_children->get(root_view_children->length() - 1);
364
365 widget->GetRootView()->AddChildView(new views::View);
366 ExpectChildNodeInserted(root_view_node->getNodeId(),
367 sibling_view_node->getNodeId());
368 }
369
370 TEST_F(AshDevToolsTest, ViewRemoved) {
371 std::unique_ptr<views::Widget> widget(
372 CreateTestWidget(gfx::Rect(1, 1, 1, 1)));
373 // Need to store |view| in unique_ptr because it is removed from the widget
374 // and needs to be destroyed independently
375 std::unique_ptr<views::View> child_view = base::MakeUnique<views::View>();
376 WmWindow* window = WmLookup::Get()->GetWindowForWidget(widget.get());
377 widget->Show();
378 views::View* root_view = widget->GetRootView();
379 root_view->AddChildView(child_view.get());
380
381 // Initialize DOMAgent
382 std::unique_ptr<ui::devtools::protocol::DOM::Node> root;
383 dom_agent()->getDocument(&root);
384
385 DOM::Node* parent_node = FindInRoot(window, root.get());
386 ASSERT_TRUE(parent_node);
387 DOM::Node* widget_node = parent_node->getChildren(nullptr)->get(0);
388 DOM::Node* root_view_node = widget_node->getChildren(nullptr)->get(0);
389 Array<DOM::Node>* root_view_children = root_view_node->getChildren(nullptr);
390 ASSERT_TRUE(root_view_children);
391 DOM::Node* child_view_node =
392 root_view_children->get(root_view_children->length() - 1);
393
394 Compare(child_view.get(), child_view_node);
395 root_view->RemoveChildView(child_view.get());
396 ExpectChildNodeRemoved(root_view_node->getNodeId(),
397 child_view_node->getNodeId());
398 }
399
400 TEST_F(AshDevToolsTest, ViewRearranged) {
401 std::unique_ptr<views::Widget> widget(
402 CreateTestWidget(gfx::Rect(1, 1, 1, 1)));
403 WmWindow* window = WmLookup::Get()->GetWindowForWidget(widget.get());
404 widget->Show();
405 views::View* root_view = widget->GetRootView();
406 views::View* parent_view = new views::View;
407 views::View* target_view = new views::View;
408 views::View* child_view = new views::View;
409 root_view->AddChildView(parent_view);
410 root_view->AddChildView(target_view);
411 parent_view->AddChildView(child_view);
412
413 // Initialize DOMAgent
414 std::unique_ptr<ui::devtools::protocol::DOM::Node> root;
415 dom_agent()->getDocument(&root);
416
417 DOM::Node* parent_node = FindInRoot(window, root.get());
418 ASSERT_TRUE(parent_node);
419 DOM::Node* widget_node = parent_node->getChildren(nullptr)->get(0);
420 DOM::Node* root_view_node = widget_node->getChildren(nullptr)->get(0);
421 Array<DOM::Node>* root_view_children = root_view_node->getChildren(nullptr);
422 ASSERT_TRUE(root_view_children);
423 size_t root_children_size = root_view_children->length();
424 ASSERT_TRUE(root_children_size >= 2);
425 DOM::Node* parent_view_node = root_view_children->get(root_children_size - 2);
426 DOM::Node* target_view_node = root_view_children->get(root_children_size - 1);
427 DOM::Node* child_view_node = parent_view_node->getChildren(nullptr)->get(0);
428
429 Compare(parent_view, parent_view_node);
430 Compare(target_view, target_view_node);
431 Compare(child_view, child_view_node);
432 target_view->AddChildView(child_view);
433 ExpectChildNodeRemoved(parent_view_node->getNodeId(),
434 child_view_node->getNodeId());
435 ExpectChildNodeInserted(target_view_node->getNodeId(), 0);
436 }
437
438 TEST_F(AshDevToolsTest, ViewRearrangedRemovedAndInserted) {
439 std::unique_ptr<views::Widget> widget(
440 CreateTestWidget(gfx::Rect(1, 1, 1, 1)));
441 WmWindow* window = WmLookup::Get()->GetWindowForWidget(widget.get());
442 widget->Show();
443 views::View* root_view = widget->GetRootView();
444 views::View* parent_view = new views::View;
445 views::View* target_view = new views::View;
446 views::View* child_view = new views::View;
447 root_view->AddChildView(parent_view);
448 root_view->AddChildView(target_view);
449 parent_view->AddChildView(child_view);
450
451 // Initialize DOMAgent
452 std::unique_ptr<ui::devtools::protocol::DOM::Node> root;
453 dom_agent()->getDocument(&root);
454
455 DOM::Node* parent_node = FindInRoot(window, root.get());
456 ASSERT_TRUE(parent_node);
457 DOM::Node* widget_node = parent_node->getChildren(nullptr)->get(0);
458 DOM::Node* root_view_node = widget_node->getChildren(nullptr)->get(0);
459 Array<DOM::Node>* root_view_children = root_view_node->getChildren(nullptr);
460 ASSERT_TRUE(root_view_children);
461 size_t root_children_size = root_view_children->length();
462 ASSERT_TRUE(root_children_size >= 2);
463 DOM::Node* parent_view_node = root_view_children->get(root_children_size - 2);
464 DOM::Node* target_view_node = root_view_children->get(root_children_size - 1);
465 DOM::Node* child_view_node = parent_view_node->getChildren(nullptr)->get(0);
466
467 Compare(parent_view, parent_view_node);
468 Compare(target_view, target_view_node);
469 Compare(child_view, child_view_node);
470 parent_view->RemoveChildView(child_view);
471 target_view->AddChildView(child_view);
472 ExpectChildNodeRemoved(parent_view_node->getNodeId(),
473 child_view_node->getNodeId());
474 ExpectChildNodeInserted(target_view_node->getNodeId(), 0);
475 }
476
314 } // namespace ash 477 } // namespace ash
OLDNEW
« no previous file with comments | « ash/common/devtools/ash_devtools_dom_agent.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698