Index: chrome/browser/printing/printing_message_filter.cc |
diff --git a/chrome/browser/printing/printing_message_filter.cc b/chrome/browser/printing/printing_message_filter.cc |
index 35b4074328de8ba4ec5e2cdce26e9c18c0654bf4..bb381f39db82bfc04768b9c803bda6a7058e35e8 100644 |
--- a/chrome/browser/printing/printing_message_filter.cc |
+++ b/chrome/browser/printing/printing_message_filter.cc |
@@ -32,6 +32,10 @@ |
#include "chrome/browser/printing/print_dialog_cloud.h" |
#endif |
+#if defined(OS_ANDROID) |
+#include "chrome/browser/printing/print_view_manager_basic.h" |
+#endif |
+ |
using content::BrowserThread; |
namespace { |
@@ -100,6 +104,11 @@ void PrintingMessageFilter::OverrideThreadForMessage( |
message.type() == PrintHostMsg_TempFileForPrintingWritten::ID) { |
*thread = BrowserThread::FILE; |
} |
+#elif defined(OS_ANDROID) |
+ if (message.type() == PrintHostMsg_AllocateTempFileForPrinting::ID || |
+ message.type() == PrintHostMsg_TempFileForPrintingWritten::ID) { |
+ *thread = BrowserThread::UI; |
+ } |
#endif |
} |
@@ -110,7 +119,7 @@ bool PrintingMessageFilter::OnMessageReceived(const IPC::Message& message, |
#if defined(OS_WIN) |
IPC_MESSAGE_HANDLER(PrintHostMsg_DuplicateSection, OnDuplicateSection) |
#endif |
-#if defined(OS_CHROMEOS) |
+#if defined(OS_CHROMEOS) || defined(OS_ANDROID) |
IPC_MESSAGE_HANDLER(PrintHostMsg_AllocateTempFileForPrinting, |
OnAllocateTempFileForPrinting) |
IPC_MESSAGE_HANDLER(PrintHostMsg_TempFileForPrintingWritten, |
@@ -141,9 +150,13 @@ void PrintingMessageFilter::OnDuplicateSection( |
} |
#endif |
-#if defined(OS_CHROMEOS) |
+#if defined(OS_CHROMEOS) || defined(OS_ANDROID) |
void PrintingMessageFilter::OnAllocateTempFileForPrinting( |
- base::FileDescriptor* temp_file_fd, int* sequence_number) { |
+ int render_view_id, |
+ base::FileDescriptor* temp_file_fd, |
+ int* sequence_number) { |
+#if defined(OS_CHROMEOS) |
+ // TODO(thestig): Use |render_view_id| for Chrome OS. |
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); |
temp_file_fd->fd = *sequence_number = -1; |
temp_file_fd->auto_close = false; |
@@ -166,10 +179,21 @@ void PrintingMessageFilter::OnAllocateTempFileForPrinting( |
} |
} |
} |
+#elif defined(OS_ANDROID) |
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
+ content::WebContents* wc = GetWebContentsForRenderView(render_view_id); |
+ printing::PrintViewManagerBasic* print_view_manager = |
+ printing::PrintViewManagerBasic::FromWebContents(wc); |
+ // The file descriptor is originally created in & passed from the Android |
+ // side, and it will handle the closing. |
+ temp_file_fd->auto_close = false; |
Lei Zhang
2013/08/15 01:31:05
So after you hand off the fd to the renderer, and
whywhat
2013/08/15 22:41:43
How is the browser notified when the renderer cras
Lei Zhang
2013/08/15 23:18:01
PrintViewManagerBase -> content::WebContentsObserv
|
+ temp_file_fd->fd = print_view_manager->GetFileDescriptor().fd; |
+#endif |
} |
void PrintingMessageFilter::OnTempFileForPrintingWritten(int render_view_id, |
int sequence_number) { |
+#if defined(OS_CHROMEOS) |
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); |
SequenceToPathMap* map = &g_printing_file_descriptor_map.Get().map; |
SequenceToPathMap::iterator it = map->find(sequence_number); |
@@ -185,8 +209,18 @@ void PrintingMessageFilter::OnTempFileForPrintingWritten(int render_view_id, |
// Erase the entry in the map. |
map->erase(it); |
+#elif defined(OS_ANDROID) |
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
+ content::WebContents* wc = GetWebContentsForRenderView(render_view_id); |
+ printing::PrintViewManagerBasic* print_view_manager = |
+ printing::PrintViewManagerBasic::FromWebContents(wc); |
+ // Invalidate the file descriptor so it doesn't accidentally get reused. |
+ print_view_manager->SetFileDescriptor(base::FileDescriptor(-1, false)); |
Lei Zhang
2013/08/15 01:31:05
Don't you need to do something here to tell the up
whywhat
2013/08/15 22:41:43
We could use the fd as the key here. When fd is cr
Lei Zhang
2013/08/15 23:18:01
I'm just trying to understand if that's something
|
+#endif |
} |
+#endif // defined(OS_CHROMEOS) || defined(OS_ANDROID) |
+#if defined(OS_CHROMEOS) |
void PrintingMessageFilter::CreatePrintDialogForFile( |
int render_view_id, |
const base::FilePath& path) { |