| Index: chrome/browser/renderer_host/render_message_filter_gtk.cc
|
| ===================================================================
|
| --- chrome/browser/renderer_host/render_message_filter_gtk.cc (revision 75488)
|
| +++ chrome/browser/renderer_host/render_message_filter_gtk.cc (working copy)
|
| @@ -1,346 +0,0 @@
|
| -// Copyright (c) 2011 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/renderer_host/render_message_filter.h"
|
| -
|
| -#include <fcntl.h>
|
| -#include <map>
|
| -
|
| -#include "base/file_util.h"
|
| -#include "base/lazy_instance.h"
|
| -#include "base/path_service.h"
|
| -#include "chrome/browser/browser_thread.h"
|
| -#include "chrome/common/chrome_paths.h"
|
| -#include "chrome/common/render_messages.h"
|
| -#include "grit/generated_resources.h"
|
| -#include "third_party/WebKit/Source/WebKit/chromium/public/WebScreenInfo.h"
|
| -#include "third_party/WebKit/Source/WebKit/chromium/public/x11/WebScreenInfoFactory.h"
|
| -#include "ui/base/clipboard/clipboard.h"
|
| -#include "ui/base/x/x11_util.h"
|
| -#include "ui/gfx/gtk_native_view_id_manager.h"
|
| -
|
| -#if defined(OS_CHROMEOS)
|
| -#include "chrome/browser/printing/print_dialog_cloud.h"
|
| -#endif
|
| -
|
| -using WebKit::WebScreenInfo;
|
| -using WebKit::WebScreenInfoFactory;
|
| -
|
| -namespace {
|
| -
|
| -typedef std::map<int, FilePath> SequenceToPathMap;
|
| -
|
| -struct PrintingSequencePathMap {
|
| - SequenceToPathMap map;
|
| - int sequence;
|
| -};
|
| -
|
| -// No locking, only access on the FILE thread.
|
| -static base::LazyInstance<PrintingSequencePathMap>
|
| - g_printing_file_descriptor_map(base::LINKER_INITIALIZED);
|
| -
|
| -} // namespace
|
| -
|
| -// We get null window_ids passed into the two functions below; please see
|
| -// http://crbug.com/9060 for more details.
|
| -
|
| -void RenderMessageFilter::DoOnGetScreenInfo(gfx::NativeViewId view,
|
| - IPC::Message* reply_msg) {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::BACKGROUND_X11));
|
| - Display* display = ui::GetSecondaryDisplay();
|
| - int screen = ui::GetDefaultScreen(display);
|
| - WebScreenInfo results = WebScreenInfoFactory::screenInfo(display, screen);
|
| - ViewHostMsg_GetScreenInfo::WriteReplyParams(reply_msg, results);
|
| - Send(reply_msg);
|
| -}
|
| -
|
| -void RenderMessageFilter::DoOnGetWindowRect(gfx::NativeViewId view,
|
| - IPC::Message* reply_msg) {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::BACKGROUND_X11));
|
| - // This is called to get the x, y offset (in screen coordinates) of the given
|
| - // view and its width and height.
|
| - gfx::Rect rect;
|
| - XID window;
|
| -
|
| - base::AutoLock lock(GtkNativeViewManager::GetInstance()->unrealize_lock());
|
| - if (GtkNativeViewManager::GetInstance()->GetXIDForId(&window, view)) {
|
| - if (window) {
|
| - int x, y;
|
| - unsigned width, height;
|
| - if (ui::GetWindowGeometry(&x, &y, &width, &height, window))
|
| - rect = gfx::Rect(x, y, width, height);
|
| - }
|
| - }
|
| -
|
| - ViewHostMsg_GetWindowRect::WriteReplyParams(reply_msg, rect);
|
| - Send(reply_msg);
|
| -}
|
| -
|
| -// Return the top-level parent of the given window. Called on the
|
| -// BACKGROUND_X11 thread.
|
| -static XID GetTopLevelWindow(XID window) {
|
| - bool parent_is_root;
|
| - XID parent_window;
|
| -
|
| - if (!ui::GetWindowParent(&parent_window, &parent_is_root, window))
|
| - return 0;
|
| - if (parent_is_root)
|
| - return window;
|
| -
|
| - return GetTopLevelWindow(parent_window);
|
| -}
|
| -
|
| -void RenderMessageFilter::DoOnGetRootWindowRect(gfx::NativeViewId view,
|
| - IPC::Message* reply_msg) {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::BACKGROUND_X11));
|
| - // This is called to get the screen coordinates and size of the browser
|
| - // window itself.
|
| - gfx::Rect rect;
|
| - XID window;
|
| -
|
| - base::AutoLock lock(GtkNativeViewManager::GetInstance()->unrealize_lock());
|
| - if (GtkNativeViewManager::GetInstance()->GetXIDForId(&window, view)) {
|
| - if (window) {
|
| - const XID toplevel = GetTopLevelWindow(window);
|
| - if (toplevel) {
|
| - int x, y;
|
| - unsigned width, height;
|
| - if (ui::GetWindowGeometry(&x, &y, &width, &height, toplevel))
|
| - rect = gfx::Rect(x, y, width, height);
|
| - }
|
| - }
|
| - }
|
| -
|
| - ViewHostMsg_GetRootWindowRect::WriteReplyParams(reply_msg, rect);
|
| - Send(reply_msg);
|
| -}
|
| -
|
| -void RenderMessageFilter::DoOnClipboardIsFormatAvailable(
|
| - ui::Clipboard::FormatType format, ui::Clipboard::Buffer buffer,
|
| - IPC::Message* reply_msg) {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| - const bool result = GetClipboard()->IsFormatAvailable(format, buffer);
|
| -
|
| - ViewHostMsg_ClipboardIsFormatAvailable::WriteReplyParams(reply_msg, result);
|
| - Send(reply_msg);
|
| -}
|
| -
|
| -void RenderMessageFilter::DoOnClipboardReadText(ui::Clipboard::Buffer buffer,
|
| - IPC::Message* reply_msg) {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| - string16 result;
|
| - GetClipboard()->ReadText(buffer, &result);
|
| -
|
| - ViewHostMsg_ClipboardReadText::WriteReplyParams(reply_msg, result);
|
| - Send(reply_msg);
|
| -}
|
| -
|
| -void RenderMessageFilter::DoOnClipboardReadAsciiText(
|
| - ui::Clipboard::Buffer buffer, IPC::Message* reply_msg) {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| - std::string result;
|
| - GetClipboard()->ReadAsciiText(buffer, &result);
|
| -
|
| - ViewHostMsg_ClipboardReadAsciiText::WriteReplyParams(reply_msg, result);
|
| - Send(reply_msg);
|
| -}
|
| -
|
| -void RenderMessageFilter::DoOnClipboardReadHTML(ui::Clipboard::Buffer buffer,
|
| - IPC::Message* reply_msg) {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| - std::string src_url_str;
|
| - string16 markup;
|
| - GetClipboard()->ReadHTML(buffer, &markup, &src_url_str);
|
| - const GURL src_url = GURL(src_url_str);
|
| -
|
| - ViewHostMsg_ClipboardReadHTML::WriteReplyParams(reply_msg, markup, src_url);
|
| - Send(reply_msg);
|
| -}
|
| -
|
| -void RenderMessageFilter::DoOnClipboardReadAvailableTypes(
|
| - ui::Clipboard::Buffer buffer, IPC::Message* reply_msg) {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| - Send(reply_msg);
|
| -}
|
| -
|
| -void RenderMessageFilter::DoOnClipboardReadData(ui::Clipboard::Buffer buffer,
|
| - const string16& type,
|
| - IPC::Message* reply_msg) {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| - Send(reply_msg);
|
| -}
|
| -void RenderMessageFilter::DoOnClipboardReadFilenames(
|
| - ui::Clipboard::Buffer buffer, IPC::Message* reply_msg) {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| - Send(reply_msg);
|
| -}
|
| -
|
| -#if defined(OS_CHROMEOS)
|
| -void RenderMessageFilter::DoOnAllocateTempFileForPrinting(
|
| - IPC::Message* reply_msg) {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
|
| - base::FileDescriptor temp_file_fd(-1, false);
|
| - SequenceToPathMap* map = &g_printing_file_descriptor_map.Get().map;
|
| - const int sequence_number = g_printing_file_descriptor_map.Get().sequence++;
|
| -
|
| - FilePath path;
|
| - if (file_util::CreateTemporaryFile(&path)) {
|
| - int fd = open(path.value().c_str(), O_WRONLY);
|
| - if (fd >= 0) {
|
| - SequenceToPathMap::iterator it = map->find(sequence_number);
|
| - if (it != map->end()) {
|
| - NOTREACHED() << "Sequence number already in use. seq=" <<
|
| - sequence_number;
|
| - } else {
|
| - (*map)[sequence_number] = path;
|
| - temp_file_fd.fd = fd;
|
| - temp_file_fd.auto_close = true;
|
| - }
|
| - }
|
| - }
|
| -
|
| - ViewHostMsg_AllocateTempFileForPrinting::WriteReplyParams(
|
| - reply_msg, temp_file_fd, sequence_number);
|
| - Send(reply_msg);
|
| -}
|
| -
|
| -void RenderMessageFilter::DoOnTempFileForPrintingWritten(int sequence_number) {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
|
| - SequenceToPathMap* map = &g_printing_file_descriptor_map.Get().map;
|
| - SequenceToPathMap::iterator it = map->find(sequence_number);
|
| - if (it == map->end()) {
|
| - NOTREACHED() << "Got a sequence that we didn't pass to the "
|
| - "renderer: " << sequence_number;
|
| - return;
|
| - }
|
| -
|
| - if (cloud_print_enabled_)
|
| - PrintDialogCloud::CreatePrintDialogForPdf(it->second, string16(), true);
|
| - else
|
| - NOTIMPLEMENTED();
|
| -
|
| - // Erase the entry in the map.
|
| - map->erase(it);
|
| -}
|
| -#endif // defined(OS_CHROMEOS)
|
| -
|
| -void RenderMessageFilter::OnGetScreenInfo(gfx::NativeViewId view,
|
| - IPC::Message* reply_msg) {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
|
| - BrowserThread::PostTask(
|
| - BrowserThread::BACKGROUND_X11, FROM_HERE,
|
| - NewRunnableMethod(
|
| - this, &RenderMessageFilter::DoOnGetScreenInfo, view, reply_msg));
|
| -}
|
| -
|
| -void RenderMessageFilter::OnGetWindowRect(gfx::NativeViewId view,
|
| - IPC::Message* reply_msg) {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
|
| - BrowserThread::PostTask(
|
| - BrowserThread::BACKGROUND_X11, FROM_HERE,
|
| - NewRunnableMethod(
|
| - this, &RenderMessageFilter::DoOnGetWindowRect, view, reply_msg));
|
| -}
|
| -
|
| -void RenderMessageFilter::OnGetRootWindowRect(gfx::NativeViewId view,
|
| - IPC::Message* reply_msg) {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
|
| - BrowserThread::PostTask(
|
| - BrowserThread::BACKGROUND_X11, FROM_HERE,
|
| - NewRunnableMethod(
|
| - this, &RenderMessageFilter::DoOnGetRootWindowRect, view, reply_msg));
|
| -}
|
| -
|
| -void RenderMessageFilter::OnClipboardIsFormatAvailable(
|
| - ui::Clipboard::FormatType format, ui::Clipboard::Buffer buffer,
|
| - IPC::Message* reply_msg) {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
|
| - BrowserThread::PostTask(
|
| - BrowserThread::UI, FROM_HERE,
|
| - NewRunnableMethod(
|
| - this, &RenderMessageFilter::DoOnClipboardIsFormatAvailable, format,
|
| - buffer, reply_msg));
|
| -}
|
| -
|
| -void RenderMessageFilter::OnClipboardReadText(ui::Clipboard::Buffer buffer,
|
| - IPC::Message* reply_msg) {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
|
| - BrowserThread::PostTask(
|
| - BrowserThread::UI, FROM_HERE,
|
| - NewRunnableMethod(
|
| - this, &RenderMessageFilter::DoOnClipboardReadText, buffer,
|
| - reply_msg));
|
| -}
|
| -
|
| -void RenderMessageFilter::OnClipboardReadAsciiText(ui::Clipboard::Buffer buffer,
|
| - IPC::Message* reply_msg) {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
|
| - BrowserThread::PostTask(
|
| - BrowserThread::UI, FROM_HERE,
|
| - NewRunnableMethod(
|
| - this, &RenderMessageFilter::DoOnClipboardReadAsciiText, buffer,
|
| - reply_msg));
|
| -}
|
| -
|
| -void RenderMessageFilter::OnClipboardReadHTML(ui::Clipboard::Buffer buffer,
|
| - IPC::Message* reply_msg) {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
|
| - BrowserThread::PostTask(
|
| - BrowserThread::UI, FROM_HERE,
|
| - NewRunnableMethod(
|
| - this, &RenderMessageFilter::DoOnClipboardReadHTML, buffer,
|
| - reply_msg));
|
| -}
|
| -
|
| -void RenderMessageFilter::OnClipboardReadAvailableTypes(
|
| - ui::Clipboard::Buffer buffer, IPC::Message* reply_msg) {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
|
| - BrowserThread::PostTask(
|
| - BrowserThread::UI, FROM_HERE,
|
| - NewRunnableMethod(
|
| - this, &RenderMessageFilter::DoOnClipboardReadAvailableTypes, buffer,
|
| - reply_msg));
|
| -}
|
| -
|
| -void RenderMessageFilter::OnClipboardReadData(ui::Clipboard::Buffer buffer,
|
| - const string16& type,
|
| - IPC::Message* reply_msg) {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
|
| - BrowserThread::PostTask(
|
| - BrowserThread::UI, FROM_HERE,
|
| - NewRunnableMethod(
|
| - this, &RenderMessageFilter::DoOnClipboardReadData, buffer, type,
|
| - reply_msg));
|
| -}
|
| -
|
| -void RenderMessageFilter::OnClipboardReadFilenames(
|
| - ui::Clipboard::Buffer buffer, IPC::Message* reply_msg) {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
|
| - BrowserThread::PostTask(
|
| - BrowserThread::UI, FROM_HERE,
|
| - NewRunnableMethod(
|
| - this, &RenderMessageFilter::DoOnClipboardReadFilenames, buffer,
|
| - reply_msg));
|
| -}
|
| -
|
| -#if defined(OS_CHROMEOS)
|
| -void RenderMessageFilter::OnAllocateTempFileForPrinting(
|
| - IPC::Message* reply_msg) {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
|
| - BrowserThread::PostTask(
|
| - BrowserThread::FILE, FROM_HERE,
|
| - NewRunnableMethod(
|
| - this, &RenderMessageFilter::DoOnAllocateTempFileForPrinting,
|
| - reply_msg));
|
| -}
|
| -
|
| -void RenderMessageFilter::OnTempFileForPrintingWritten(int sequence_number) {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
|
| - BrowserThread::PostTask(
|
| - BrowserThread::FILE, FROM_HERE,
|
| - NewRunnableMethod(
|
| - this, &RenderMessageFilter::DoOnTempFileForPrintingWritten,
|
| - sequence_number));
|
| -}
|
| -#endif // defined(OS_CHROMEOS)
|
|
|