diff options
Diffstat (limited to 'chrome')
-rw-r--r-- | chrome/browser/chrome_browser_main_win.cc | 7 | ||||
-rw-r--r-- | chrome/browser/chrome_browser_main_win.h | 4 | ||||
-rw-r--r-- | chrome/browser/metro_viewer/metro_viewer_process_host_win.cc | 55 | ||||
-rw-r--r-- | chrome/browser/metro_viewer/metro_viewer_process_host_win.h | 41 | ||||
-rw-r--r-- | chrome/chrome_browser.gypi | 7 |
5 files changed, 114 insertions, 0 deletions
diff --git a/chrome/browser/chrome_browser_main_win.cc b/chrome/browser/chrome_browser_main_win.cc index 8a5295b..23d5009 100644 --- a/chrome/browser/chrome_browser_main_win.cc +++ b/chrome/browser/chrome_browser_main_win.cc @@ -49,6 +49,10 @@ #include "ui/base/win/message_box_win.h" #include "ui/gfx/platform_font_win.h" +#if defined(USE_AURA) +#include "chrome/browser/metro_viewer/metro_viewer_process_host_win.h" +#endif + namespace { @@ -211,6 +215,9 @@ void ChromeBrowserMainPartsWin::PreMainMessageLoopRun() { ChromeBrowserMainParts::PreMainMessageLoopRun(); removable_device_notifications_window_->Init(); +#if defined(USE_AURA) + metro_viewer_process_host_.reset(new MetroViewerProcessHost); +#endif } // static diff --git a/chrome/browser/chrome_browser_main_win.h b/chrome/browser/chrome_browser_main_win.h index 4256382..4094013 100644 --- a/chrome/browser/chrome_browser_main_win.h +++ b/chrome/browser/chrome_browser_main_win.h @@ -11,6 +11,7 @@ #include "chrome/browser/chrome_browser_main.h" class CommandLine; +class MetroViewerProcessHost; namespace chrome { class RemovableDeviceNotificationsWindowWin; @@ -69,6 +70,9 @@ class ChromeBrowserMainPartsWin : public ChromeBrowserMainParts { private: scoped_refptr<chrome::RemovableDeviceNotificationsWindowWin> removable_device_notifications_window_; +#if defined(USE_AURA) + scoped_ptr<MetroViewerProcessHost> metro_viewer_process_host_; +#endif DISALLOW_COPY_AND_ASSIGN(ChromeBrowserMainPartsWin); }; diff --git a/chrome/browser/metro_viewer/metro_viewer_process_host_win.cc b/chrome/browser/metro_viewer/metro_viewer_process_host_win.cc new file mode 100644 index 0000000..bfbfe5f --- /dev/null +++ b/chrome/browser/metro_viewer/metro_viewer_process_host_win.cc @@ -0,0 +1,55 @@ +// Copyright 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 "chrome/browser/metro_viewer/metro_viewer_process_host_win.h" + +#include "base/logging.h" +#include "content/public/browser/browser_thread.h" +#include "ipc/ipc_channel_proxy.h" +#include "ui/metro_viewer/metro_viewer_messages.h" +#include "ui/surface/accelerated_surface_win.h" + +MetroViewerProcessHost::MetroViewerProcessHost() { + channel_.reset(new IPC::ChannelProxy( + // TODO(scottmg): Need to have a secure way to randomize and request + // this name from the viewer-side. + "viewer", + IPC::Channel::MODE_NAMED_SERVER, + this, + content::BrowserThread::GetMessageLoopProxyForThread( + content::BrowserThread::IO))); +} + +MetroViewerProcessHost::~MetroViewerProcessHost() { +} + +bool MetroViewerProcessHost::Send(IPC::Message* msg) { + return channel_->Send(msg); +} + +bool MetroViewerProcessHost::OnMessageReceived(const IPC::Message& message) { + DCHECK(CalledOnValidThread()); + bool handled = true; + IPC_BEGIN_MESSAGE_MAP(MetroViewerProcessHost, message) + IPC_MESSAGE_HANDLER(MetroViewerHostMsg_SetTargetSurface, OnSetTargetSurface) + IPC_MESSAGE_HANDLER(MetroViewerHostMsg_MouseEvent, OnMouseEvent) + IPC_MESSAGE_UNHANDLED(handled = false) + IPC_END_MESSAGE_MAP() + return handled; +} + +void MetroViewerProcessHost::OnSetTargetSurface( + gfx::NativeViewId target_surface) { + DLOG(INFO) << __FUNCTION__ << ", target_surface = " << target_surface; + HWND hwnd = reinterpret_cast<HWND>(target_surface); + + scoped_refptr<AcceleratedPresenter> any_window = + AcceleratedPresenter::GetForWindow(NULL); + any_window->SetNewTargetWindow(hwnd); +} + +void MetroViewerProcessHost::OnMouseEvent( + int msg, WPARAM w_param, LPARAM l_param) { + // TODO(scottmg): Pass to window. +} diff --git a/chrome/browser/metro_viewer/metro_viewer_process_host_win.h b/chrome/browser/metro_viewer/metro_viewer_process_host_win.h new file mode 100644 index 0000000..076d61b --- /dev/null +++ b/chrome/browser/metro_viewer/metro_viewer_process_host_win.h @@ -0,0 +1,41 @@ +// Copyright 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. + +#ifndef CHROME_BROWSER_METRO_VIEWER_METRO_VIEWER_PROCESS_HOST_WIN_H_ +#define CHROME_BROWSER_METRO_VIEWER_METRO_VIEWER_PROCESS_HOST_WIN_H_ + +#include "base/memory/scoped_ptr.h" +#include "base/memory/weak_ptr.h" +#include "base/threading/non_thread_safe.h" +#include "ipc/ipc_listener.h" +#include "ipc/ipc_sender.h" +#include "ui/gfx/native_widget_types.h" + +namespace IPC { +class ChannelProxy; +} + +class MetroViewerProcessHost : public IPC::Listener, + public IPC::Sender, + public base::NonThreadSafe { + public: + MetroViewerProcessHost(); + virtual ~MetroViewerProcessHost(); + + // IPC::Sender implementation. + virtual bool Send(IPC::Message* msg) OVERRIDE; + + // IPC::Listener implementation. + virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE; + + private: + void OnSetTargetSurface(gfx::NativeViewId target_surface); + void OnMouseEvent(int msg, WPARAM w_param, LPARAM l_param); + + scoped_ptr<IPC::ChannelProxy> channel_; + + DISALLOW_COPY_AND_ASSIGN(MetroViewerProcessHost); +}; + +#endif // CHROME_BROWSER_METRO_VIEWER_METRO_VIEWER_PROCESS_HOST_WIN_H_ diff --git a/chrome/chrome_browser.gypi b/chrome/chrome_browser.gypi index 44ce739..d6493b53 100644 --- a/chrome/chrome_browser.gypi +++ b/chrome/chrome_browser.gypi @@ -2339,6 +2339,10 @@ ['exclude', '^browser/tab_contents/web_drag_bookmark_handler_win.cc'], ['exclude', '^browser/tab_contents/web_drag_bookmark_handler_win.h'], ], + 'sources': [ + 'browser/metro_viewer/metro_viewer_process_host_win.cc', + 'browser/metro_viewer/metro_viewer_process_host_win.h', + ], 'dependencies': [ '../ui/aura/aura.gyp:aura', '../ui/compositor/compositor.gyp:compositor', @@ -2350,6 +2354,9 @@ ['exclude', '^browser/lifetime/application_lifetime_win.cc'], ['exclude', '^browser/fullscreen_win.cc'], ], + 'dependencies': [ + '../ui/metro_viewer/metro_viewer.gyp:metro_viewer', + ], }], ], }], |