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

Side by Side Diff: components/native_app_window/native_app_window_views.cc

Issue 616253002: Extract NativeAppWindow from src/extensions Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: might fix athena. similarity=33 Created 6 years, 2 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 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 "components/native_app_window/native_app_window_views.h" 5 #include "components/native_app_window/native_app_window_views.h"
6 6
7 #include "base/threading/sequenced_worker_pool.h" 7 #include "base/threading/sequenced_worker_pool.h"
8 #include "components/native_app_window/app_window_create_params.h"
9 #include "components/native_app_window/draggable_region.h"
8 #include "content/public/browser/render_view_host.h" 10 #include "content/public/browser/render_view_host.h"
9 #include "content/public/browser/render_widget_host_view.h" 11 #include "content/public/browser/render_widget_host_view.h"
10 #include "content/public/browser/web_contents.h" 12 #include "content/public/browser/web_contents.h"
11 #include "extensions/browser/app_window/app_window.h"
12 #include "extensions/common/draggable_region.h"
13 #include "third_party/skia/include/core/SkRegion.h" 13 #include "third_party/skia/include/core/SkRegion.h"
14 #include "ui/gfx/path.h" 14 #include "ui/gfx/path.h"
15 #include "ui/views/controls/webview/webview.h" 15 #include "ui/views/controls/webview/webview.h"
16 #include "ui/views/widget/widget.h" 16 #include "ui/views/widget/widget.h"
17 #include "ui/views/window/non_client_view.h" 17 #include "ui/views/window/non_client_view.h"
18 18
19 #if defined(USE_AURA) 19 #if defined(USE_AURA)
20 #include "ui/aura/window.h" 20 #include "ui/aura/window.h"
21 #endif 21 #endif
22 22
23 using extensions::AppWindow;
24
25 namespace native_app_window { 23 namespace native_app_window {
26 24
27 NativeAppWindowViews::NativeAppWindowViews() 25 NativeAppWindowViews::NativeAppWindowViews()
28 : app_window_(NULL), 26 : app_window_(NULL),
29 web_view_(NULL), 27 web_view_(NULL),
30 widget_(NULL), 28 widget_(NULL),
31 frameless_(false), 29 frameless_(false),
32 resizable_(false) { 30 resizable_(false) {
33 } 31 }
34 32
35 void NativeAppWindowViews::Init(AppWindow* app_window, 33 void NativeAppWindowViews::Init(NativeAppWindowDelegate* app_window,
36 const AppWindow::CreateParams& create_params) { 34 const AppWindowCreateParams& create_params) {
37 app_window_ = app_window; 35 app_window_ = app_window;
38 frameless_ = create_params.frame == AppWindow::FRAME_NONE; 36 frameless_ = create_params.frame == native_app_window::FRAME_NONE;
39 resizable_ = create_params.resizable; 37 resizable_ = create_params.resizable;
40 size_constraints_.set_minimum_size( 38 size_constraints_.set_minimum_size(
41 create_params.GetContentMinimumSize(gfx::Insets())); 39 create_params.GetContentMinimumSize(gfx::Insets()));
42 size_constraints_.set_maximum_size( 40 size_constraints_.set_maximum_size(
43 create_params.GetContentMaximumSize(gfx::Insets())); 41 create_params.GetContentMaximumSize(gfx::Insets()));
44 Observe(app_window_->web_contents()); 42 Observe(app_window_->GetWebContents());
45 43
46 widget_ = new views::Widget; 44 widget_ = new views::Widget;
47 InitializeWindow(app_window, create_params); 45 InitializeWindow(app_window, create_params);
48 46
49 OnViewWasResized(); 47 OnViewWasResized();
50 widget_->AddObserver(this); 48 widget_->AddObserver(this);
51 } 49 }
52 50
53 NativeAppWindowViews::~NativeAppWindowViews() { 51 NativeAppWindowViews::~NativeAppWindowViews() {
54 web_view_->SetWebContents(NULL); 52 web_view_->SetWebContents(NULL);
55 } 53 }
56 54
57 void NativeAppWindowViews::OnCanHaveAlphaEnabledChanged() { 55 void NativeAppWindowViews::OnCanHaveAlphaEnabledChanged() {
58 app_window_->OnNativeWindowChanged(); 56 app_window_->OnNativeWindowChanged();
59 } 57 }
60 58
61 void NativeAppWindowViews::InitializeWindow( 59 void NativeAppWindowViews::InitializeWindow(
62 AppWindow* app_window, 60 NativeAppWindowDelegate* app_window,
63 const AppWindow::CreateParams& create_params) { 61 const AppWindowCreateParams& create_params) {
64 // Stub implementation. See also ChromeNativeAppWindowViews. 62 // Stub implementation. See also ChromeNativeAppWindowViews.
65 views::Widget::InitParams init_params(views::Widget::InitParams::TYPE_WINDOW); 63 views::Widget::InitParams init_params(views::Widget::InitParams::TYPE_WINDOW);
66 init_params.delegate = this; 64 init_params.delegate = this;
67 init_params.keep_on_top = create_params.always_on_top; 65 init_params.keep_on_top = create_params.always_on_top;
68 widget_->Init(init_params); 66 widget_->Init(init_params);
69 widget_->CenterWindow( 67 widget_->CenterWindow(
70 create_params.GetInitialWindowBounds(gfx::Insets()).size()); 68 create_params.GetInitialWindowBounds(gfx::Insets()).size());
71 } 69 }
72 70
73 // ui::BaseWindow implementation. 71 // ui::BaseWindow implementation.
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after
208 return web_view_; 206 return web_view_;
209 } 207 }
210 208
211 bool NativeAppWindowViews::CanResize() const { 209 bool NativeAppWindowViews::CanResize() const {
212 return resizable_ && !size_constraints_.HasFixedSize() && 210 return resizable_ && !size_constraints_.HasFixedSize() &&
213 !WidgetHasHitTestMask(); 211 !WidgetHasHitTestMask();
214 } 212 }
215 213
216 bool NativeAppWindowViews::CanMaximize() const { 214 bool NativeAppWindowViews::CanMaximize() const {
217 return resizable_ && !size_constraints_.HasMaximumSize() && 215 return resizable_ && !size_constraints_.HasMaximumSize() &&
218 !app_window_->window_type_is_panel() && !WidgetHasHitTestMask(); 216 !app_window_->WindowTypeIsPanel() && !WidgetHasHitTestMask();
219 } 217 }
220 218
221 bool NativeAppWindowViews::CanMinimize() const { 219 bool NativeAppWindowViews::CanMinimize() const {
222 return true; 220 return true;
223 } 221 }
224 222
225 base::string16 NativeAppWindowViews::GetWindowTitle() const { 223 base::string16 NativeAppWindowViews::GetWindowTitle() const {
226 return app_window_->GetTitle(); 224 return app_window_->GetTitle();
227 } 225 }
228 226
229 bool NativeAppWindowViews::ShouldShowWindowTitle() const { 227 bool NativeAppWindowViews::ShouldShowWindowTitle() const {
230 return app_window_->window_type() == AppWindow::WINDOW_TYPE_V1_PANEL; 228 return app_window_->GetWindowType() ==
229 native_app_window::WINDOW_TYPE_V1_PANEL;
231 } 230 }
232 231
233 bool NativeAppWindowViews::ShouldShowWindowIcon() const { 232 bool NativeAppWindowViews::ShouldShowWindowIcon() const {
234 return app_window_->window_type() == AppWindow::WINDOW_TYPE_V1_PANEL; 233 return app_window_->GetWindowType() ==
234 native_app_window::WINDOW_TYPE_V1_PANEL;
235 } 235 }
236 236
237 void NativeAppWindowViews::SaveWindowPlacement(const gfx::Rect& bounds, 237 void NativeAppWindowViews::SaveWindowPlacement(const gfx::Rect& bounds,
238 ui::WindowShowState show_state) { 238 ui::WindowShowState show_state) {
239 views::WidgetDelegate::SaveWindowPlacement(bounds, show_state); 239 views::WidgetDelegate::SaveWindowPlacement(bounds, show_state);
240 app_window_->OnNativeWindowChanged(); 240 app_window_->OnNativeWindowChanged();
241 } 241 }
242 242
243 void NativeAppWindowViews::DeleteDelegate() { 243 void NativeAppWindowViews::DeleteDelegate() {
244 widget_->RemoveObserver(this); 244 widget_->RemoveObserver(this);
245 app_window_->OnNativeClose(); 245 app_window_->OnNativeClose();
246 } 246 }
247 247
248 views::Widget* NativeAppWindowViews::GetWidget() { 248 views::Widget* NativeAppWindowViews::GetWidget() {
249 return widget_; 249 return widget_;
250 } 250 }
251 251
252 const views::Widget* NativeAppWindowViews::GetWidget() const { 252 const views::Widget* NativeAppWindowViews::GetWidget() const {
253 return widget_; 253 return widget_;
254 } 254 }
255 255
256 views::View* NativeAppWindowViews::GetContentsView() { 256 views::View* NativeAppWindowViews::GetContentsView() {
257 return this; 257 return this;
258 } 258 }
259 259
260 bool NativeAppWindowViews::ShouldDescendIntoChildForEventHandling( 260 bool NativeAppWindowViews::ShouldDescendIntoChildForEventHandling(
261 gfx::NativeView child, 261 gfx::NativeView child,
262 const gfx::Point& location) { 262 const gfx::Point& location) {
263 #if defined(USE_AURA) 263 #if defined(USE_AURA)
264 if (child->Contains(web_view_->web_contents()->GetNativeView())) { 264 if (child->Contains(web_view_->GetWebContents()->GetNativeView())) {
265 // App window should claim mouse events that fall within the draggable 265 // App window should claim mouse events that fall within the draggable
266 // region. 266 // region.
267 return !draggable_region_.get() || 267 return !draggable_region_.get() ||
268 !draggable_region_->contains(location.x(), location.y()); 268 !draggable_region_->contains(location.x(), location.y());
269 } 269 }
270 #endif 270 #endif
271 271
272 return true; 272 return true;
273 } 273 }
274 274
275 // WidgetObserver implementation. 275 // WidgetObserver implementation.
276 276
277 void NativeAppWindowViews::OnWidgetVisibilityChanged(views::Widget* widget, 277 void NativeAppWindowViews::OnWidgetVisibilityChanged(views::Widget* widget,
278 bool visible) { 278 bool visible) {
279 app_window_->OnNativeWindowChanged(); 279 app_window_->OnNativeWindowChanged();
280 } 280 }
281 281
282 void NativeAppWindowViews::OnWidgetActivationChanged(views::Widget* widget, 282 void NativeAppWindowViews::OnWidgetActivationChanged(views::Widget* widget,
283 bool active) { 283 bool active) {
284 app_window_->OnNativeWindowChanged(); 284 app_window_->OnNativeWindowChanged();
285 if (active) 285 if (active)
286 app_window_->OnNativeWindowActivated(); 286 app_window_->OnNativeWindowActivated();
287 } 287 }
288 288
289 // WebContentsObserver implementation. 289 // WebContentsObserver implementation.
290 290
291 void NativeAppWindowViews::RenderViewCreated( 291 void NativeAppWindowViews::RenderViewCreated(
292 content::RenderViewHost* render_view_host) { 292 content::RenderViewHost* render_view_host) {
293 if (app_window_->requested_alpha_enabled() && CanHaveAlphaEnabled()) { 293 if (app_window_->RequestedAlphaEnabled() && CanHaveAlphaEnabled()) {
294 content::RenderWidgetHostView* view = render_view_host->GetView(); 294 content::RenderWidgetHostView* view = render_view_host->GetView();
295 DCHECK(view); 295 DCHECK(view);
296 view->SetBackgroundOpaque(false); 296 view->SetBackgroundOpaque(false);
297 } 297 }
298 } 298 }
299 299
300 void NativeAppWindowViews::RenderViewHostChanged( 300 void NativeAppWindowViews::RenderViewHostChanged(
301 content::RenderViewHost* old_host, 301 content::RenderViewHost* old_host,
302 content::RenderViewHost* new_host) { 302 content::RenderViewHost* new_host) {
303 OnViewWasResized(); 303 OnViewWasResized();
304 } 304 }
305 305
306 // views::View implementation. 306 // views::View implementation.
307 307
308 void NativeAppWindowViews::Layout() { 308 void NativeAppWindowViews::Layout() {
309 DCHECK(web_view_); 309 DCHECK(web_view_);
310 web_view_->SetBounds(0, 0, width(), height()); 310 web_view_->SetBounds(0, 0, width(), height());
311 OnViewWasResized(); 311 OnViewWasResized();
312 } 312 }
313 313
314 void NativeAppWindowViews::ViewHierarchyChanged( 314 void NativeAppWindowViews::ViewHierarchyChanged(
315 const ViewHierarchyChangedDetails& details) { 315 const ViewHierarchyChangedDetails& details) {
316 if (details.is_add && details.child == this) { 316 if (details.is_add && details.child == this) {
317 web_view_ = new views::WebView(NULL); 317 web_view_ = new views::WebView(NULL);
318 AddChildView(web_view_); 318 AddChildView(web_view_);
319 web_view_->SetWebContents(app_window_->web_contents()); 319 web_view_->SetWebContents(app_window_->GetWebContents());
320 } 320 }
321 } 321 }
322 322
323 gfx::Size NativeAppWindowViews::GetMinimumSize() const { 323 gfx::Size NativeAppWindowViews::GetMinimumSize() const {
324 return size_constraints_.GetMinimumSize(); 324 return size_constraints_.GetMinimumSize();
325 } 325 }
326 326
327 gfx::Size NativeAppWindowViews::GetMaximumSize() const { 327 gfx::Size NativeAppWindowViews::GetMaximumSize() const {
328 return size_constraints_.GetMaximumSize(); 328 return size_constraints_.GetMaximumSize();
329 } 329 }
330 330
331 void NativeAppWindowViews::OnFocus() { 331 void NativeAppWindowViews::OnFocus() {
332 web_view_->RequestFocus(); 332 web_view_->RequestFocus();
333 } 333 }
334 334
335 // NativeAppWindow implementation. 335 // NativeAppWindow implementation.
336 336
337 void NativeAppWindowViews::SetFullscreen(int fullscreen_types) { 337 void NativeAppWindowViews::SetFullscreen(int fullscreen_types) {
338 // Stub implementation. See also ChromeNativeAppWindowViews. 338 // Stub implementation. See also ChromeNativeAppWindowViews.
339 widget_->SetFullscreen(fullscreen_types != AppWindow::FULLSCREEN_TYPE_NONE); 339 widget_->SetFullscreen(fullscreen_types !=
340 native_app_window::FULLSCREEN_TYPE_NONE);
340 } 341 }
341 342
342 bool NativeAppWindowViews::IsFullscreenOrPending() const { 343 bool NativeAppWindowViews::IsFullscreenOrPending() const {
343 // Stub implementation. See also ChromeNativeAppWindowViews. 344 // Stub implementation. See also ChromeNativeAppWindowViews.
344 return widget_->IsFullscreen(); 345 return widget_->IsFullscreen();
345 } 346 }
346 347
347 void NativeAppWindowViews::UpdateWindowIcon() { 348 void NativeAppWindowViews::UpdateWindowIcon() {
348 widget_->UpdateWindowIcon(); 349 widget_->UpdateWindowIcon();
349 } 350 }
350 351
351 void NativeAppWindowViews::UpdateWindowTitle() { 352 void NativeAppWindowViews::UpdateWindowTitle() {
352 widget_->UpdateWindowTitle(); 353 widget_->UpdateWindowTitle();
353 } 354 }
354 355
355 void NativeAppWindowViews::UpdateBadgeIcon() { 356 void NativeAppWindowViews::UpdateBadgeIcon() {
356 // Stub implementation. See also ChromeNativeAppWindowViews. 357 // Stub implementation. See also ChromeNativeAppWindowViews.
357 } 358 }
358 359
359 void NativeAppWindowViews::UpdateDraggableRegions( 360 void NativeAppWindowViews::UpdateDraggableRegions(
360 const std::vector<extensions::DraggableRegion>& regions) { 361 const std::vector<native_app_window::DraggableRegion>& regions) {
361 // Draggable region is not supported for non-frameless window. 362 // Draggable region is not supported for non-frameless window.
362 if (!frameless_) 363 if (!frameless_)
363 return; 364 return;
364 365
365 draggable_region_.reset(AppWindow::RawDraggableRegionsToSkRegion(regions)); 366 draggable_region_.reset(RawDraggableRegionsToSkRegion(regions));
366 OnViewWasResized(); 367 OnViewWasResized();
367 } 368 }
368 369
369 SkRegion* NativeAppWindowViews::GetDraggableRegion() { 370 SkRegion* NativeAppWindowViews::GetDraggableRegion() {
370 return draggable_region_.get(); 371 return draggable_region_.get();
371 } 372 }
372 373
373 void NativeAppWindowViews::UpdateShape(scoped_ptr<SkRegion> region) { 374 void NativeAppWindowViews::UpdateShape(scoped_ptr<SkRegion> region) {
374 // Stub implementation. See also ChromeNativeAppWindowViews. 375 // Stub implementation. See also ChromeNativeAppWindowViews.
375 } 376 }
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
438 439
439 bool NativeAppWindowViews::CanHaveAlphaEnabled() const { 440 bool NativeAppWindowViews::CanHaveAlphaEnabled() const {
440 return widget_->IsTranslucentWindowOpacitySupported(); 441 return widget_->IsTranslucentWindowOpacitySupported();
441 } 442 }
442 443
443 void NativeAppWindowViews::SetVisibleOnAllWorkspaces(bool always_visible) { 444 void NativeAppWindowViews::SetVisibleOnAllWorkspaces(bool always_visible) {
444 widget_->SetVisibleOnAllWorkspaces(always_visible); 445 widget_->SetVisibleOnAllWorkspaces(always_visible);
445 } 446 }
446 447
447 } // namespace native_app_window 448 } // namespace native_app_window
OLDNEW
« no previous file with comments | « components/native_app_window/native_app_window_views.h ('k') | components/native_app_window/size_constraints.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698