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

Unified Diff: content/browser/web_contents/web_contents_view_win.cc

Issue 137403005: Remove some code inside USE_AURA and OS_WIN ifdefs. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 6 years, 11 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 side-by-side diff with in-line comments
Download patch
Index: content/browser/web_contents/web_contents_view_win.cc
===================================================================
--- content/browser/web_contents/web_contents_view_win.cc (revision 244508)
+++ content/browser/web_contents/web_contents_view_win.cc (working copy)
@@ -1,465 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "content/browser/web_contents/web_contents_view_win.h"
-
-#include "base/bind.h"
-#include "base/memory/scoped_vector.h"
-#include "content/browser/frame_host/interstitial_page_impl.h"
-#include "content/browser/renderer_host/render_view_host_factory.h"
-#include "content/browser/renderer_host/render_view_host_impl.h"
-#include "content/browser/renderer_host/render_widget_host_view_win.h"
-#include "content/browser/web_contents/web_contents_drag_win.h"
-#include "content/browser/web_contents/web_contents_impl.h"
-#include "content/browser/web_contents/web_drag_dest_win.h"
-#include "content/public/browser/web_contents_delegate.h"
-#include "content/public/browser/web_contents_view_delegate.h"
-#include "ui/base/win/hidden_window.h"
-#include "ui/base/win/hwnd_subclass.h"
-#include "ui/gfx/screen.h"
-
-namespace content {
-WebContentsViewPort* CreateWebContentsView(
- WebContentsImpl* web_contents,
- WebContentsViewDelegate* delegate,
- RenderViewHostDelegateView** render_view_host_delegate_view) {
- WebContentsViewWin* rv = new WebContentsViewWin(web_contents, delegate);
- *render_view_host_delegate_view = rv;
- return rv;
-}
-
-namespace {
-
-typedef std::map<HWND, WebContentsViewWin*> HwndToWcvMap;
-HwndToWcvMap hwnd_to_wcv_map;
-
-void RemoveHwndToWcvMapEntry(WebContentsViewWin* wcv) {
- HwndToWcvMap::iterator it;
- for (it = hwnd_to_wcv_map.begin(); it != hwnd_to_wcv_map.end();) {
- if (it->second == wcv)
- hwnd_to_wcv_map.erase(it++);
- else
- ++it;
- }
-}
-
-BOOL CALLBACK EnumChildProc(HWND hwnd, LPARAM lParam) {
- HwndToWcvMap::iterator it = hwnd_to_wcv_map.find(hwnd);
- if (it == hwnd_to_wcv_map.end())
- return TRUE; // must return TRUE to continue enumeration.
- WebContentsViewWin* wcv = it->second;
- RenderWidgetHostViewWin* rwhv = static_cast<RenderWidgetHostViewWin*>(
- wcv->web_contents()->GetRenderWidgetHostView());
- if (rwhv)
- rwhv->UpdateScreenInfo(rwhv->GetNativeView());
-
- return TRUE; // must return TRUE to continue enumeration.
-}
-
-class PositionChangedMessageFilter : public ui::HWNDMessageFilter {
- public:
- PositionChangedMessageFilter() {}
-
- private:
- // Overridden from ui::HWNDMessageFilter:
- virtual bool FilterMessage(HWND hwnd,
- UINT message,
- WPARAM w_param,
- LPARAM l_param,
- LRESULT* l_result) OVERRIDE {
- if (message == WM_WINDOWPOSCHANGED || message == WM_SETTINGCHANGE)
- EnumChildWindows(hwnd, EnumChildProc, 0);
-
- return false;
- }
-
- DISALLOW_COPY_AND_ASSIGN(PositionChangedMessageFilter);
-};
-
-void AddFilterToParentHwndSubclass(HWND hwnd, ui::HWNDMessageFilter* filter) {
- HWND parent = ::GetAncestor(hwnd, GA_ROOT);
- if (parent) {
- ui::HWNDSubclass::RemoveFilterFromAllTargets(filter);
- ui::HWNDSubclass::AddFilterToTarget(parent, filter);
- }
-}
-
-} // namespace namespace
-
-WebContentsViewWin::WebContentsViewWin(WebContentsImpl* web_contents,
- WebContentsViewDelegate* delegate)
- : web_contents_(web_contents),
- delegate_(delegate),
- hwnd_message_filter_(new PositionChangedMessageFilter) {
-}
-
-WebContentsViewWin::~WebContentsViewWin() {
- RemoveHwndToWcvMapEntry(this);
-
- if (IsWindow(hwnd()))
- DestroyWindow(hwnd());
-}
-
-gfx::NativeView WebContentsViewWin::GetNativeView() const {
- return hwnd();
-}
-
-gfx::NativeView WebContentsViewWin::GetContentNativeView() const {
- RenderWidgetHostView* rwhv = web_contents_->GetRenderWidgetHostView();
- return rwhv ? rwhv->GetNativeView() : NULL;
-}
-
-gfx::NativeWindow WebContentsViewWin::GetTopLevelNativeWindow() const {
- return ::GetAncestor(GetNativeView(), GA_ROOT);
-}
-
-void WebContentsViewWin::GetContainerBounds(gfx::Rect *out) const {
- // Copied from NativeWidgetWin::GetClientAreaScreenBounds().
- RECT r;
- GetClientRect(hwnd(), &r);
- POINT point = { r.left, r.top };
- ClientToScreen(hwnd(), &point);
- *out = gfx::Rect(point.x, point.y, r.right - r.left, r.bottom - r.top);
-}
-
-void WebContentsViewWin::OnTabCrashed(base::TerminationStatus status,
- int error_code) {
-}
-
-void WebContentsViewWin::SizeContents(const gfx::Size& size) {
- gfx::Rect bounds;
- GetContainerBounds(&bounds);
- if (bounds.size() != size) {
- SetWindowPos(hwnd(), NULL, 0, 0, size.width(), size.height(),
- SWP_NOACTIVATE | SWP_NOZORDER | SWP_NOMOVE);
- } else {
- // Our size matches what we want but the renderers size may not match.
- // Pretend we were resized so that the renderers size is updated too.
- if (web_contents_->GetInterstitialPage())
- web_contents_->GetInterstitialPage()->SetSize(size);
- RenderWidgetHostView* rwhv = web_contents_->GetRenderWidgetHostView();
- if (rwhv)
- rwhv->SetSize(size);
- }
-}
-
-void WebContentsViewWin::CreateView(
- const gfx::Size& initial_size, gfx::NativeView context) {
- initial_size_ = initial_size;
-
- set_window_style(WS_VISIBLE | WS_CHILD | WS_CLIPCHILDREN | WS_CLIPSIBLINGS);
-
- Init(ui::GetHiddenWindow(), gfx::Rect(initial_size_));
-
- // Remove the root view drop target so we can register our own.
- RevokeDragDrop(GetNativeView());
- drag_dest_ = new WebDragDest(hwnd(), web_contents_);
- if (delegate_) {
- WebDragDestDelegate* delegate = delegate_->GetDragDestDelegate();
- if (delegate)
- drag_dest_->set_delegate(delegate);
- }
-}
-
-void WebContentsViewWin::Focus() {
- if (web_contents_->GetInterstitialPage()) {
- web_contents_->GetInterstitialPage()->Focus();
- return;
- }
-
- if (delegate_.get() && delegate_->Focus())
- return;
-
- RenderWidgetHostView* rwhv = web_contents_->GetRenderWidgetHostView();
- if (rwhv)
- rwhv->Focus();
-}
-
-void WebContentsViewWin::SetInitialFocus() {
- if (web_contents_->FocusLocationBarByDefault())
- web_contents_->SetFocusToLocationBar(false);
- else
- Focus();
-}
-
-void WebContentsViewWin::StoreFocus() {
- if (delegate_)
- delegate_->StoreFocus();
-}
-
-void WebContentsViewWin::RestoreFocus() {
- if (delegate_)
- delegate_->RestoreFocus();
-}
-
-DropData* WebContentsViewWin::GetDropData() const {
- return drag_dest_->current_drop_data();
-}
-
-gfx::Rect WebContentsViewWin::GetViewBounds() const {
- RECT r;
- GetWindowRect(hwnd(), &r);
- return gfx::Rect(r);
-}
-
-RenderWidgetHostView* WebContentsViewWin::CreateViewForWidget(
- RenderWidgetHost* render_widget_host) {
- if (render_widget_host->GetView()) {
- // During testing, the view will already be set up in most cases to the
- // test view, so we don't want to clobber it with a real one. To verify that
- // this actually is happening (and somebody isn't accidentally creating the
- // view twice), we check for the RVH Factory, which will be set when we're
- // making special ones (which go along with the special views).
- DCHECK(RenderViewHostFactory::has_factory());
- return render_widget_host->GetView();
- }
-
- RenderWidgetHostViewWin* view = static_cast<RenderWidgetHostViewWin*>(
- RenderWidgetHostView::CreateViewForWidget(render_widget_host));
- view->CreateWnd(GetNativeView());
- view->ShowWindow(SW_SHOW);
- view->SetSize(initial_size_);
- return view;
-}
-
-RenderWidgetHostView* WebContentsViewWin::CreateViewForPopupWidget(
- RenderWidgetHost* render_widget_host) {
- return RenderWidgetHostViewPort::CreateViewForWidget(render_widget_host);
-}
-
-void WebContentsViewWin::SetPageTitle(const base::string16& title) {
- // It's possible to get this after the hwnd has been destroyed.
- if (GetNativeView())
- ::SetWindowText(GetNativeView(), title.c_str());
-}
-
-void WebContentsViewWin::RenderViewCreated(RenderViewHost* host) {
-}
-
-void WebContentsViewWin::RenderViewSwappedIn(RenderViewHost* host) {
-}
-
-void WebContentsViewWin::SetOverscrollControllerEnabled(bool enabled) {
-}
-
-void WebContentsViewWin::ShowContextMenu(const ContextMenuParams& params) {
- if (delegate_)
- delegate_->ShowContextMenu(params);
- // WARNING: this may have been deleted.
-}
-
-void WebContentsViewWin::ShowPopupMenu(const gfx::Rect& bounds,
- int item_height,
- double item_font_size,
- int selected_item,
- const std::vector<MenuItem>& items,
- bool right_aligned,
- bool allow_multiple_selection) {
- // External popup menus are only used on Mac and Android.
- NOTIMPLEMENTED();
-}
-
-void WebContentsViewWin::StartDragging(const DropData& drop_data,
- blink::WebDragOperationsMask operations,
- const gfx::ImageSkia& image,
- const gfx::Vector2d& image_offset,
- const DragEventSourceInfo& event_info) {
- drag_handler_ = new WebContentsDragWin(
- GetNativeView(),
- web_contents_,
- drag_dest_,
- base::Bind(&WebContentsViewWin::EndDragging, base::Unretained(this)));
- drag_handler_->StartDragging(drop_data, operations, image, image_offset);
-}
-
-void WebContentsViewWin::UpdateDragCursor(blink::WebDragOperation operation) {
- drag_dest_->set_drag_cursor(operation);
-}
-
-void WebContentsViewWin::GotFocus() {
- if (web_contents_->GetDelegate())
- web_contents_->GetDelegate()->WebContentsFocused(web_contents_);
-}
-
-void WebContentsViewWin::TakeFocus(bool reverse) {
- if (web_contents_->GetDelegate() &&
- !web_contents_->GetDelegate()->TakeFocus(web_contents_, reverse) &&
- delegate_.get()) {
- delegate_->TakeFocus(reverse);
- }
-}
-
-void WebContentsViewWin::EndDragging() {
- drag_handler_ = NULL;
- web_contents_->SystemDragEnded();
-}
-
-void WebContentsViewWin::CloseTab() {
- RenderViewHost* rvh = web_contents_->GetRenderViewHost();
- rvh->GetDelegate()->Close(rvh);
-}
-
-LRESULT WebContentsViewWin::OnCreate(
- UINT message, WPARAM wparam, LPARAM lparam, BOOL& handled) {
- hwnd_to_wcv_map.insert(std::make_pair(hwnd(), this));
- AddFilterToParentHwndSubclass(hwnd(), hwnd_message_filter_.get());
- return 0;
-}
-
-LRESULT WebContentsViewWin::OnDestroy(
- UINT message, WPARAM wparam, LPARAM lparam, BOOL& handled) {
- if (drag_dest_) {
- RevokeDragDrop(GetNativeView());
- drag_dest_ = NULL;
- }
- if (drag_handler_) {
- drag_handler_->CancelDrag();
- drag_handler_ = NULL;
- }
- return 0;
-}
-
-LRESULT WebContentsViewWin::OnWindowPosChanged(
- UINT message, WPARAM wparam, LPARAM lparam, BOOL& handled) {
-
- // Our parent might have changed. So we re-install our hwnd message filter.
- AddFilterToParentHwndSubclass(hwnd(), hwnd_message_filter_.get());
-
- WINDOWPOS* window_pos = reinterpret_cast<WINDOWPOS*>(lparam);
- if (window_pos->flags & SWP_HIDEWINDOW) {
- web_contents_->WasHidden();
- return 0;
- }
-
- // The WebContents was shown by a means other than the user selecting a
- // Tab, e.g. the window was minimized then restored.
- if (window_pos->flags & SWP_SHOWWINDOW)
- web_contents_->WasShown();
-
- RenderWidgetHostView* rwhv = web_contents_->GetRenderWidgetHostView();
- if (rwhv) {
- RenderWidgetHostViewWin* view = static_cast<RenderWidgetHostViewWin*>(rwhv);
- view->UpdateScreenInfo(view->GetNativeView());
- }
-
- // Unless we were specifically told not to size, cause the renderer to be
- // sized to the new bounds, which forces a repaint. Not required for the
- // simple minimize-restore case described above, for example, since the
- // size hasn't changed.
- if (window_pos->flags & SWP_NOSIZE)
- return 0;
-
- gfx::Size size(window_pos->cx, window_pos->cy);
- if (web_contents_->GetInterstitialPage())
- web_contents_->GetInterstitialPage()->SetSize(size);
- if (rwhv)
- rwhv->SetSize(size);
-
- if (delegate_)
- delegate_->SizeChanged(size);
-
- return 0;
-}
-
-LRESULT WebContentsViewWin::OnMouseDown(
- UINT message, WPARAM wparam, LPARAM lparam, BOOL& handled) {
- // Make sure this WebContents is activated when it is clicked on.
- if (web_contents_->GetDelegate())
- web_contents_->GetDelegate()->ActivateContents(web_contents_);
- return 0;
-}
-
-LRESULT WebContentsViewWin::OnMouseMove(
- UINT message, WPARAM wparam, LPARAM lparam, BOOL& handled) {
- // Let our delegate know that the mouse moved (useful for resetting status
- // bubble state).
- if (web_contents_->GetDelegate()) {
- web_contents_->GetDelegate()->ContentsMouseEvent(
- web_contents_,
- gfx::Screen::GetNativeScreen()->GetCursorScreenPoint(),
- true);
- }
- return 0;
-}
-
-LRESULT WebContentsViewWin::OnNCCalcSize(
- UINT message, WPARAM wparam, LPARAM lparam, BOOL& handled) {
- // Hack for ThinkPad mouse wheel driver. We have set the fake scroll bars
- // to receive scroll messages from ThinkPad touch-pad driver. Suppress
- // painting of scrollbars by returning 0 size for them.
- return 0;
-}
-
-LRESULT WebContentsViewWin::OnNCHitTest(
- UINT message, WPARAM wparam, LPARAM lparam, BOOL& handled) {
- return HTTRANSPARENT;
-}
-
-LRESULT WebContentsViewWin::OnScroll(
- UINT message, WPARAM wparam, LPARAM lparam, BOOL& handled) {
- int scroll_type = LOWORD(wparam);
- short position = HIWORD(wparam);
- HWND scrollbar = reinterpret_cast<HWND>(lparam);
- // This window can receive scroll events as a result of the ThinkPad's
- // touch-pad scroll wheel emulation.
- // If ctrl is held, zoom the UI. There are three issues with this:
- // 1) Should the event be eaten or forwarded to content? We eat the event,
- // which is like Firefox and unlike IE.
- // 2) Should wheel up zoom in or out? We zoom in (increase font size), which
- // is like IE and Google maps, but unlike Firefox.
- // 3) Should the mouse have to be over the content area? We zoom as long as
- // content has focus, although FF and IE require that the mouse is over
- // content. This is because all events get forwarded when content has
- // focus.
- if (GetAsyncKeyState(VK_CONTROL) & 0x8000) {
- int distance = 0;
- switch (scroll_type) {
- case SB_LINEUP:
- distance = WHEEL_DELTA;
- break;
- case SB_LINEDOWN:
- distance = -WHEEL_DELTA;
- break;
- // TODO(joshia): Handle SB_PAGEUP, SB_PAGEDOWN, SB_THUMBPOSITION,
- // and SB_THUMBTRACK for completeness
- default:
- break;
- }
-
- web_contents_->GetDelegate()->ContentsZoomChange(distance > 0);
- return 0;
- }
-
- // Reflect scroll message to the view() to give it a chance
- // to process scrolling.
- SendMessage(GetContentNativeView(), message, wparam, lparam);
- return 0;
-}
-
-LRESULT WebContentsViewWin::OnSize(
- UINT message, WPARAM wparam, LPARAM lparam, BOOL& handled) {
- // NOTE: Because we handle OnWindowPosChanged without calling DefWindowProc,
- // OnSize is NOT called on window resize. This handler is called only once
- // when the window is created.
- // Don't call base class OnSize to avoid useless layout for 0x0 size.
- // We will get OnWindowPosChanged later and layout root view in WasSized.
-
- // Hack for ThinkPad touch-pad driver.
- // Set fake scrollbars so that we can get scroll messages,
- SCROLLINFO si = {0};
- si.cbSize = sizeof(si);
- si.fMask = SIF_ALL;
-
- si.nMin = 1;
- si.nMax = 100;
- si.nPage = 10;
- si.nPos = 50;
-
- ::SetScrollInfo(hwnd(), SB_HORZ, &si, FALSE);
- ::SetScrollInfo(hwnd(), SB_VERT, &si, FALSE);
-
- return 1;
-}
-
-} // namespace content

Powered by Google App Engine
This is Rietveld 408576698