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

Side by Side Diff: chrome/browser/ui/test/test_browser_dialog.cc

Issue 2901763002: Revert of Remove uses of FontList::Derive*(..) in views payments dialogs. (Closed)
Patch Set: Created 3 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
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 "chrome/browser/ui/test/test_browser_dialog.h" 5 #include "chrome/browser/ui/test/test_browser_dialog.h"
6 6
7 #include "base/command_line.h" 7 #include "base/command_line.h"
8 #include "base/message_loop/message_loop.h" 8 #include "base/message_loop/message_loop.h"
9 #include "base/stl_util.h" 9 #include "base/stl_util.h"
10 #include "base/test/gtest_util.h" 10 #include "base/test/gtest_util.h"
(...skipping 12 matching lines...) Expand all
23 #endif 23 #endif
24 24
25 namespace { 25 namespace {
26 26
27 // An automatic action for WidgetCloser to post to the RunLoop. 27 // An automatic action for WidgetCloser to post to the RunLoop.
28 // TODO(tapted): Explore asynchronous Widget::Close() and DialogClientView:: 28 // TODO(tapted): Explore asynchronous Widget::Close() and DialogClientView::
29 // {Accept,Cancel}Window() approaches to test other dialog lifetimes. 29 // {Accept,Cancel}Window() approaches to test other dialog lifetimes.
30 enum class DialogAction { 30 enum class DialogAction {
31 INTERACTIVE, // Run interactively. 31 INTERACTIVE, // Run interactively.
32 CLOSE_NOW, // Call Widget::CloseNow(). 32 CLOSE_NOW, // Call Widget::CloseNow().
33 CLOSE, // Call Widget::Close().
34 }; 33 };
35 34
36 // Helper to break out of the nested run loop that runs a test dialog. 35 // Helper to break out of the nested run loop that runs a test dialog.
37 class WidgetCloser : public views::WidgetObserver { 36 class WidgetCloser : public views::WidgetObserver {
38 public: 37 public:
39 WidgetCloser(views::Widget* widget, DialogAction action) 38 WidgetCloser(views::Widget* widget, DialogAction action)
40 : action_(action), widget_(widget), weak_ptr_factory_(this) { 39 : widget_(widget), weak_ptr_factory_(this) {
41 widget->AddObserver(this); 40 widget->AddObserver(this);
42 if (action == DialogAction::INTERACTIVE) 41 if (action == DialogAction::INTERACTIVE)
43 return; 42 return;
44 43
45 base::ThreadTaskRunnerHandle::Get()->PostTask( 44 base::ThreadTaskRunnerHandle::Get()->PostTask(
46 FROM_HERE, base::BindOnce(&WidgetCloser::CloseAction, 45 FROM_HERE, base::BindOnce(&WidgetCloser::CloseNow,
47 weak_ptr_factory_.GetWeakPtr())); 46 weak_ptr_factory_.GetWeakPtr()));
48 } 47 }
49 48
50 // WidgetObserver: 49 // WidgetObserver:
51 void OnWidgetDestroyed(views::Widget* widget) override { 50 void OnWidgetDestroyed(views::Widget* widget) override {
52 widget_->RemoveObserver(this); 51 widget_->RemoveObserver(this);
53 widget_ = nullptr; 52 widget_ = nullptr;
54 base::MessageLoop::current()->QuitNow(); 53 base::MessageLoop::current()->QuitNow();
55 } 54 }
56 55
57 private: 56 private:
58 void CloseAction() { 57 void CloseNow() {
59 if (!widget_) 58 if (widget_)
60 return; 59 widget_->CloseNow();
61
62 switch (action_) {
63 case DialogAction::CLOSE_NOW:
64 widget_->CloseNow();
65 break;
66 case DialogAction::CLOSE:
67 widget_->Close();
68 break;
69 case DialogAction::INTERACTIVE:
70 NOTREACHED();
71 break;
72 }
73 } 60 }
74 61
75 const DialogAction action_;
76 views::Widget* widget_; 62 views::Widget* widget_;
77 63
78 base::WeakPtrFactory<WidgetCloser> weak_ptr_factory_; 64 base::WeakPtrFactory<WidgetCloser> weak_ptr_factory_;
79 65
80 DISALLOW_COPY_AND_ASSIGN(WidgetCloser); 66 DISALLOW_COPY_AND_ASSIGN(WidgetCloser);
81 }; 67 };
82 68
83 // Extracts the |name| argument for ShowDialog() from the current test case. 69 // Extracts the |name| argument for ShowDialog() from the current test case.
84 // E.g. for InvokeDialog_name (or DISABLED_InvokeDialog_name) returns "name". 70 // E.g. for InvokeDialog_name (or DISABLED_InvokeDialog_name) returns "name".
85 std::string NameFromTestCase() { 71 std::string NameFromTestCase() {
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
131 // ignore added Widgets that are not dialogs. 117 // ignore added Widgets that are not dialogs.
132 base::EraseIf(added, [](views::Widget* widget) { 118 base::EraseIf(added, [](views::Widget* widget) {
133 return !widget->widget_delegate()->AsDialogDelegate(); 119 return !widget->widget_delegate()->AsDialogDelegate();
134 }); 120 });
135 } 121 }
136 122
137 // This can fail if no dialog was shown, if the dialog shown wasn't a toolkit- 123 // This can fail if no dialog was shown, if the dialog shown wasn't a toolkit-
138 // views dialog, or if more than one child dialog was shown. 124 // views dialog, or if more than one child dialog was shown.
139 ASSERT_EQ(1u, added.size()); 125 ASSERT_EQ(1u, added.size());
140 126
141 DialogAction action = DialogAction::CLOSE_NOW; 127 const DialogAction action = base::CommandLine::ForCurrentProcess()->HasSwitch(
142 if (base::CommandLine::ForCurrentProcess()->HasSwitch( 128 internal::kInteractiveSwitch)
143 internal::kInteractiveSwitch)) { 129 ? DialogAction::INTERACTIVE
144 action = DialogAction::INTERACTIVE; 130 : DialogAction::CLOSE_NOW;
145 } else if (AlwaysCloseAsynchronously()) {
146 // TODO(tapted): Iterate over close methods when non-interactive for greater
147 // test coverage.
148 action = DialogAction::CLOSE;
149 }
150 131
151 WidgetCloser closer(added[0], action); 132 WidgetCloser closer(added[0], action);
152 ::test::RunTestInteractively(); 133 ::test::RunTestInteractively();
153 } 134 }
154
155 bool TestBrowserDialog::AlwaysCloseAsynchronously() {
156 return false;
157 }
OLDNEW
« no previous file with comments | « chrome/browser/ui/test/test_browser_dialog.h ('k') | chrome/browser/ui/views/payments/editor_view_controller.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698