diff options
author | scottmg@google.com <scottmg@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-10-01 21:25:12 +0000 |
---|---|---|
committer | scottmg@google.com <scottmg@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-10-01 21:25:12 +0000 |
commit | 56deedeafb9d4880280e33a4d35e769a4c119cf2 (patch) | |
tree | 54fc3c6b34e33dc4ade1c11c3355d39e52b1563c /chrome/browser/metro_viewer | |
parent | 9d68072cff1c7d2e94ea2d35026f5cdd0736a3de (diff) | |
download | chromium_src-56deedeafb9d4880280e33a4d35e769a4c119cf2.zip chromium_src-56deedeafb9d4880280e33a4d35e769a4c119cf2.tar.gz chromium_src-56deedeafb9d4880280e33a4d35e769a4c119cf2.tar.bz2 |
Listen in the browser for a connection from a metro viewer process.
Render to the surface it provides to us.
BUG=151718
Review URL: https://codereview.chromium.org/10984007
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@159559 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/metro_viewer')
-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 |
2 files changed, 96 insertions, 0 deletions
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_ |