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

Side by Side Diff: chrome/browser/chromeos/login/simple_web_view_dialog.cc

Issue 286933002: [cros login] Split login related classes into subfolders. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix includes in new tests 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
(Empty)
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "chrome/browser/chromeos/login/simple_web_view_dialog.h"
6
7 #include "ash/shell.h"
8 #include "ash/shell_window_ids.h"
9 #include "base/message_loop/message_loop.h"
10 #include "base/strings/utf_string_conversions.h"
11 #include "chrome/app/chrome_command_ids.h"
12 #include "chrome/browser/chromeos/login/captive_portal_window_proxy.h"
13 #include "chrome/browser/chromeos/login/helper.h"
14 #include "chrome/browser/command_updater.h"
15 #include "chrome/browser/password_manager/chrome_password_manager_client.h"
16 #include "chrome/browser/profiles/profile.h"
17 #include "chrome/browser/ui/autofill/tab_autofill_manager_delegate.h"
18 #include "chrome/browser/ui/browser.h"
19 #include "chrome/browser/ui/content_settings/content_setting_bubble_model_delega te.h"
20 #include "chrome/browser/ui/toolbar/toolbar_model_impl.h"
21 #include "chrome/browser/ui/view_ids.h"
22 #include "chrome/browser/ui/views/location_bar/location_icon_view.h"
23 #include "chrome/browser/ui/views/toolbar/reload_button.h"
24 #include "components/password_manager/core/browser/password_manager.h"
25 #include "content/public/browser/navigation_controller.h"
26 #include "content/public/browser/navigation_entry.h"
27 #include "content/public/browser/web_contents.h"
28 #include "grit/generated_resources.h"
29 #include "grit/theme_resources.h"
30 #include "ipc/ipc_message.h"
31 #include "ui/base/l10n/l10n_util.h"
32 #include "ui/base/theme_provider.h"
33 #include "ui/views/background.h"
34 #include "ui/views/controls/webview/webview.h"
35 #include "ui/views/layout/grid_layout.h"
36 #include "ui/views/layout/layout_constants.h"
37 #include "ui/views/view.h"
38 #include "ui/views/widget/widget.h"
39
40 using content::WebContents;
41 using views::GridLayout;
42
43 namespace {
44
45 const int kLocationBarHeight = 35;
46
47 // Margin between screen edge and SimpleWebViewDialog border.
48 const int kExternalMargin = 60;
49
50 // Margin between WebView and SimpleWebViewDialog border.
51 const int kInnerMargin = 2;
52
53 const SkColor kDialogColor = SK_ColorWHITE;
54
55 class ToolbarRowView : public views::View {
56 public:
57 ToolbarRowView() {
58 set_background(views::Background::CreateSolidBackground(kDialogColor));
59 }
60
61 virtual ~ToolbarRowView() {}
62
63 void Init(views::View* back,
64 views::View* forward,
65 views::View* reload,
66 views::View* location_bar) {
67 GridLayout* layout = new GridLayout(this);
68 SetLayoutManager(layout);
69
70 // Back button.
71 views::ColumnSet* column_set = layout->AddColumnSet(0);
72 column_set->AddColumn(GridLayout::CENTER, GridLayout::CENTER, 0,
73 GridLayout::USE_PREF, 0, 0);
74 column_set->AddPaddingColumn(0, views::kRelatedControlHorizontalSpacing);
75 // Forward button.
76 column_set->AddColumn(GridLayout::CENTER, GridLayout::CENTER, 0,
77 GridLayout::USE_PREF, 0, 0);
78 column_set->AddPaddingColumn(0, views::kRelatedControlHorizontalSpacing);
79 // Reload button.
80 column_set->AddColumn(GridLayout::CENTER, GridLayout::CENTER, 0,
81 GridLayout::USE_PREF, 0, 0);
82 column_set->AddPaddingColumn(0, views::kRelatedControlHorizontalSpacing);
83 // Location bar.
84 column_set->AddColumn(GridLayout::FILL, GridLayout::CENTER, 1,
85 GridLayout::FIXED, kLocationBarHeight, 0);
86 column_set->AddPaddingColumn(0, views::kRelatedControlHorizontalSpacing);
87
88 layout->StartRow(0, 0);
89 layout->AddView(back);
90 layout->AddView(forward);
91 layout->AddView(reload);
92 layout->AddView(location_bar);
93 }
94
95 private:
96 DISALLOW_COPY_AND_ASSIGN(ToolbarRowView);
97 };
98
99 } // namespace
100
101 namespace chromeos {
102
103 // Stub implementation of ContentSettingBubbleModelDelegate.
104 class StubBubbleModelDelegate : public ContentSettingBubbleModelDelegate {
105 public:
106 StubBubbleModelDelegate() {}
107 virtual ~StubBubbleModelDelegate() {}
108
109 // ContentSettingBubbleModelDelegate implementation:
110 virtual void ShowCollectedCookiesDialog(
111 content::WebContents* web_contents) OVERRIDE {
112 }
113
114 virtual void ShowContentSettingsPage(ContentSettingsType type) OVERRIDE {
115 }
116
117 private:
118 DISALLOW_COPY_AND_ASSIGN(StubBubbleModelDelegate);
119 };
120
121 // SimpleWebViewDialog class ---------------------------------------------------
122
123 SimpleWebViewDialog::SimpleWebViewDialog(Profile* profile)
124 : profile_(profile),
125 back_(NULL),
126 forward_(NULL),
127 reload_(NULL),
128 location_bar_(NULL),
129 web_view_(NULL),
130 bubble_model_delegate_(new StubBubbleModelDelegate) {
131 command_updater_.reset(new CommandUpdater(this));
132 command_updater_->UpdateCommandEnabled(IDC_BACK, true);
133 command_updater_->UpdateCommandEnabled(IDC_FORWARD, true);
134 command_updater_->UpdateCommandEnabled(IDC_STOP, true);
135 command_updater_->UpdateCommandEnabled(IDC_RELOAD, true);
136 command_updater_->UpdateCommandEnabled(IDC_RELOAD_IGNORING_CACHE, true);
137 command_updater_->UpdateCommandEnabled(IDC_RELOAD_CLEARING_CACHE, true);
138 }
139
140 SimpleWebViewDialog::~SimpleWebViewDialog() {
141 if (web_view_ && web_view_->web_contents())
142 web_view_->web_contents()->SetDelegate(NULL);
143 }
144
145 void SimpleWebViewDialog::StartLoad(const GURL& url) {
146 if (!web_view_container_.get())
147 web_view_container_.reset(new views::WebView(profile_));
148 web_view_ = web_view_container_.get();
149 web_view_->set_owned_by_client();
150 web_view_->GetWebContents()->SetDelegate(this);
151 web_view_->LoadInitialURL(url);
152
153 WebContents* web_contents = web_view_->GetWebContents();
154 DCHECK(web_contents);
155
156 // Create the password manager that is needed for the proxy.
157 ChromePasswordManagerClient::CreateForWebContentsWithAutofillManagerDelegate(
158 web_contents,
159 autofill::TabAutofillManagerDelegate::FromWebContents(web_contents));
160 }
161
162 void SimpleWebViewDialog::Init() {
163 toolbar_model_.reset(new ToolbarModelImpl(this));
164
165 set_background(views::Background::CreateSolidBackground(kDialogColor));
166
167 // Back/Forward buttons.
168 back_ = new views::ImageButton(this);
169 back_->set_triggerable_event_flags(ui::EF_LEFT_MOUSE_BUTTON |
170 ui::EF_MIDDLE_MOUSE_BUTTON);
171 back_->set_tag(IDC_BACK);
172 back_->SetImageAlignment(views::ImageButton::ALIGN_RIGHT,
173 views::ImageButton::ALIGN_TOP);
174 back_->SetTooltipText(l10n_util::GetStringUTF16(IDS_TOOLTIP_BACK));
175 back_->SetAccessibleName(l10n_util::GetStringUTF16(IDS_ACCNAME_BACK));
176 back_->set_id(VIEW_ID_BACK_BUTTON);
177
178 forward_ = new views::ImageButton(this);
179 forward_->set_triggerable_event_flags(ui::EF_LEFT_MOUSE_BUTTON |
180 ui::EF_MIDDLE_MOUSE_BUTTON);
181 forward_->set_tag(IDC_FORWARD);
182 forward_->SetTooltipText(l10n_util::GetStringUTF16(IDS_TOOLTIP_FORWARD));
183 forward_->SetAccessibleName(l10n_util::GetStringUTF16(IDS_ACCNAME_FORWARD));
184 forward_->set_id(VIEW_ID_FORWARD_BUTTON);
185
186 // Location bar.
187 location_bar_ = new LocationBarView(NULL, profile_, command_updater_.get(),
188 this, true);
189
190 // Reload button.
191 reload_ = new ReloadButton(command_updater_.get());
192 reload_->set_triggerable_event_flags(ui::EF_LEFT_MOUSE_BUTTON |
193 ui::EF_MIDDLE_MOUSE_BUTTON);
194 reload_->set_tag(IDC_RELOAD);
195 reload_->SetTooltipText(l10n_util::GetStringUTF16(IDS_TOOLTIP_RELOAD));
196 reload_->SetAccessibleName(l10n_util::GetStringUTF16(IDS_ACCNAME_RELOAD));
197 reload_->set_id(VIEW_ID_RELOAD_BUTTON);
198
199 // Use separate view to setup custom background.
200 ToolbarRowView* toolbar_row = new ToolbarRowView;
201 toolbar_row->Init(back_, forward_, reload_, location_bar_);
202
203 // Layout.
204 GridLayout* layout = new GridLayout(this);
205 SetLayoutManager(layout);
206
207 views::ColumnSet* column_set = layout->AddColumnSet(0);
208 column_set->AddColumn(GridLayout::FILL, GridLayout::FILL, 1,
209 GridLayout::FIXED, 0, 0);
210
211 column_set = layout->AddColumnSet(1);
212 column_set->AddPaddingColumn(0, kInnerMargin);
213 column_set->AddColumn(GridLayout::FILL, GridLayout::FILL, 1,
214 GridLayout::FIXED, 0, 0);
215 column_set->AddPaddingColumn(0, kInnerMargin);
216
217 // Setup layout rows.
218 layout->StartRow(0, 0);
219 layout->AddView(toolbar_row);
220
221 layout->AddPaddingRow(0, kInnerMargin);
222
223 layout->StartRow(1, 1);
224 layout->AddView(web_view_container_.get());
225 layout->AddPaddingRow(0, kInnerMargin);
226
227 LoadImages();
228
229 location_bar_->Init();
230 UpdateReload(web_view_->web_contents()->IsLoading(), true);
231
232 gfx::Rect bounds(CalculateScreenBounds(gfx::Size()));
233 bounds.Inset(kExternalMargin, kExternalMargin);
234 layout->set_minimum_size(bounds.size());
235
236 Layout();
237 }
238
239 void SimpleWebViewDialog::Layout() {
240 views::WidgetDelegateView::Layout();
241 }
242
243 views::View* SimpleWebViewDialog::GetContentsView() {
244 return this;
245 }
246
247 views::View* SimpleWebViewDialog::GetInitiallyFocusedView() {
248 return web_view_;
249 }
250
251 void SimpleWebViewDialog::ButtonPressed(views::Button* sender,
252 const ui::Event& event) {
253 command_updater_->ExecuteCommand(sender->tag());
254 }
255
256 content::WebContents* SimpleWebViewDialog::OpenURL(
257 const content::OpenURLParams& params) {
258 // As there are no Browsers right now, this could not actually ever work.
259 NOTIMPLEMENTED();
260 return NULL;
261 }
262
263 void SimpleWebViewDialog::NavigationStateChanged(
264 const WebContents* source, unsigned changed_flags) {
265 if (location_bar_) {
266 location_bar_->Update(NULL);
267 UpdateButtons();
268 }
269 }
270
271 void SimpleWebViewDialog::LoadingStateChanged(WebContents* source,
272 bool to_different_document) {
273 bool is_loading = source->IsLoading();
274 UpdateReload(is_loading && to_different_document, false);
275 command_updater_->UpdateCommandEnabled(IDC_STOP, is_loading);
276 }
277
278 WebContents* SimpleWebViewDialog::GetWebContents() {
279 return NULL;
280 }
281
282 ToolbarModel* SimpleWebViewDialog::GetToolbarModel() {
283 return toolbar_model_.get();
284 }
285
286 const ToolbarModel* SimpleWebViewDialog::GetToolbarModel() const {
287 return toolbar_model_.get();
288 }
289
290 InstantController* SimpleWebViewDialog::GetInstant() {
291 return NULL;
292 }
293
294 views::Widget* SimpleWebViewDialog::CreateViewsBubble(
295 views::BubbleDelegateView* bubble_delegate) {
296 return views::BubbleDelegateView::CreateBubble(bubble_delegate);
297 }
298
299 ContentSettingBubbleModelDelegate*
300 SimpleWebViewDialog::GetContentSettingBubbleModelDelegate() {
301 return bubble_model_delegate_.get();
302 }
303
304 void SimpleWebViewDialog::ShowWebsiteSettings(
305 content::WebContents* web_contents,
306 const GURL& url,
307 const content::SSLStatus& ssl) {
308 NOTIMPLEMENTED();
309 // TODO (ygorshenin@,markusheintz@): implement this
310 }
311
312 PageActionImageView* SimpleWebViewDialog::CreatePageActionImageView(
313 LocationBarView* owner,
314 ExtensionAction* action) {
315 // Notreached because SimpleWebViewDialog uses a popup-mode LocationBarView,
316 // and it doesn't create PageActionImageViews.
317 NOTREACHED();
318 return NULL;
319 }
320
321 content::WebContents* SimpleWebViewDialog::GetActiveWebContents() const {
322 return web_view_->web_contents();
323 }
324
325 bool SimpleWebViewDialog::InTabbedBrowser() const {
326 return false;
327 }
328
329 void SimpleWebViewDialog::ExecuteCommandWithDisposition(
330 int id,
331 WindowOpenDisposition) {
332 WebContents* web_contents = web_view_->web_contents();
333 switch (id) {
334 case IDC_BACK:
335 if (web_contents->GetController().CanGoBack()) {
336 location_bar_->Revert();
337 web_contents->GetController().GoBack();
338 }
339 break;
340 case IDC_FORWARD:
341 if (web_contents->GetController().CanGoForward()) {
342 location_bar_->Revert();
343 web_contents->GetController().GoForward();
344 }
345 break;
346 case IDC_STOP:
347 web_contents->Stop();
348 break;
349 case IDC_RELOAD:
350 // Always reload ignoring cache.
351 case IDC_RELOAD_IGNORING_CACHE:
352 case IDC_RELOAD_CLEARING_CACHE:
353 location_bar_->Revert();
354 web_contents->GetController().ReloadIgnoringCache(true);
355 break;
356 default:
357 NOTREACHED();
358 }
359 }
360
361 void SimpleWebViewDialog::LoadImages() {
362 ui::ThemeProvider* tp = GetThemeProvider();
363
364 back_->SetImage(views::CustomButton::STATE_NORMAL,
365 tp->GetImageSkiaNamed(IDR_BACK));
366 back_->SetImage(views::CustomButton::STATE_HOVERED,
367 tp->GetImageSkiaNamed(IDR_BACK_H));
368 back_->SetImage(views::CustomButton::STATE_PRESSED,
369 tp->GetImageSkiaNamed(IDR_BACK_P));
370 back_->SetImage(views::CustomButton::STATE_DISABLED,
371 tp->GetImageSkiaNamed(IDR_BACK_D));
372
373 forward_->SetImage(views::CustomButton::STATE_NORMAL,
374 tp->GetImageSkiaNamed(IDR_FORWARD));
375 forward_->SetImage(views::CustomButton::STATE_HOVERED,
376 tp->GetImageSkiaNamed(IDR_FORWARD_H));
377 forward_->SetImage(views::CustomButton::STATE_PRESSED,
378 tp->GetImageSkiaNamed(IDR_FORWARD_P));
379 forward_->SetImage(views::CustomButton::STATE_DISABLED,
380 tp->GetImageSkiaNamed(IDR_FORWARD_D));
381
382 reload_->LoadImages();
383 }
384
385 void SimpleWebViewDialog::UpdateButtons() {
386 const content::NavigationController& navigation_controller =
387 web_view_->web_contents()->GetController();
388 back_->SetEnabled(navigation_controller.CanGoBack());
389 forward_->SetEnabled(navigation_controller.CanGoForward());
390 }
391
392 void SimpleWebViewDialog::UpdateReload(bool is_loading, bool force) {
393 if (reload_) {
394 reload_->ChangeMode(
395 is_loading ? ReloadButton::MODE_STOP : ReloadButton::MODE_RELOAD,
396 force);
397 }
398 }
399
400 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698