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

Side by Side Diff: chrome/browser/mime_registry_dispatcher.cc

Issue 5698008: Switch a bunch of remaining filters to derive from BrowserMessageFilters so t... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 10 years 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "chrome/browser/mime_registry_dispatcher.h"
6
7 #include "chrome/browser/browser_thread.h"
8 #include "chrome/common/render_messages.h"
9 #include "net/base/mime_util.h"
10
11 MimeRegistryDispatcher::MimeRegistryDispatcher(IPC::Message::Sender* sender)
12 : message_sender_(sender) {
13 DCHECK(message_sender_);
14 }
15
16 MimeRegistryDispatcher::~MimeRegistryDispatcher() {
17 }
18
19 void MimeRegistryDispatcher::Shutdown() {
20 message_sender_ = NULL;
21 }
22
23 bool MimeRegistryDispatcher::OnMessageReceived(const IPC::Message& message) {
24 // On Windows MIME registry requests may access the Windows Registry so
25 // they need to run on the FILE thread.
26 if (!BrowserThread::CurrentlyOn(BrowserThread::FILE)) {
27 // Return false if the message is not for us.
28 if (message.type() != ViewHostMsg_GetMimeTypeFromExtension::ID &&
29 message.type() != ViewHostMsg_GetMimeTypeFromFile::ID &&
30 message.type() != ViewHostMsg_GetPreferredExtensionForMimeType::ID)
31 return false;
32
33 BrowserThread::PostTask(
34 BrowserThread::FILE, FROM_HERE,
35 NewRunnableMethod(
36 this, &MimeRegistryDispatcher::OnMessageReceived, message));
37 return true;
38 }
39 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
40
41 bool handled = true;
42 IPC_BEGIN_MESSAGE_MAP(MimeRegistryDispatcher, message)
43 IPC_MESSAGE_HANDLER_DELAY_REPLY(ViewHostMsg_GetMimeTypeFromExtension,
44 OnGetMimeTypeFromExtension)
45 IPC_MESSAGE_HANDLER_DELAY_REPLY(ViewHostMsg_GetMimeTypeFromFile,
46 OnGetMimeTypeFromFile)
47 IPC_MESSAGE_HANDLER_DELAY_REPLY(
48 ViewHostMsg_GetPreferredExtensionForMimeType,
49 OnGetPreferredExtensionForMimeType)
50 IPC_MESSAGE_UNHANDLED((handled = false))
51 IPC_END_MESSAGE_MAP()
52 return handled;
53 }
54
55 void MimeRegistryDispatcher::OnGetMimeTypeFromExtension(
56 const FilePath::StringType& ext, IPC::Message* reply_msg) {
57 std::string mime_type;
58 net::GetMimeTypeFromExtension(ext, &mime_type);
59 ViewHostMsg_GetMimeTypeFromExtension::WriteReplyParams(reply_msg, mime_type);
60 Send(reply_msg);
61 }
62
63 void MimeRegistryDispatcher::OnGetMimeTypeFromFile(
64 const FilePath& file_path, IPC::Message* reply_msg) {
65 std::string mime_type;
66 net::GetMimeTypeFromFile(file_path, &mime_type);
67 ViewHostMsg_GetMimeTypeFromFile::WriteReplyParams(reply_msg, mime_type);
68 Send(reply_msg);
69 }
70
71 void MimeRegistryDispatcher::OnGetPreferredExtensionForMimeType(
72 const std::string& mime_type, IPC::Message* reply_msg) {
73 FilePath::StringType ext;
74 net::GetPreferredExtensionForMimeType(mime_type, &ext);
75 ViewHostMsg_GetPreferredExtensionForMimeType::WriteReplyParams(
76 reply_msg, ext);
77 Send(reply_msg);
78 }
79
80 void MimeRegistryDispatcher::Send(IPC::Message* message) {
81 if (!BrowserThread::CurrentlyOn(BrowserThread::IO)) {
82 if (!BrowserThread::PostTask(
83 BrowserThread::IO, FROM_HERE, NewRunnableMethod(
84 this, &MimeRegistryDispatcher::Send, message))) {
85 // The IO thread is dead.
86 delete message;
87 }
88 return;
89 }
90
91 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
92 if (message_sender_)
93 message_sender_->Send(message);
94 else
95 delete message;
96 }
OLDNEW
« no previous file with comments | « chrome/browser/mime_registry_dispatcher.h ('k') | chrome/browser/mime_registry_message_filter.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698