OLD | NEW |
| (Empty) |
1 // Copyright (c) 2013 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 "content/shell/shell_message_filter.h" | |
6 | |
7 #include "base/file_util.h" | |
8 #include "base/threading/thread_restrictions.h" | |
9 #include "content/public/browser/child_process_security_policy.h" | |
10 #include "content/shell/common/shell_messages.h" | |
11 #include "content/shell/shell_browser_context.h" | |
12 #include "content/shell/shell_content_browser_client.h" | |
13 #include "content/shell/shell_network_delegate.h" | |
14 #include "net/base/net_errors.h" | |
15 #include "net/cookies/cookie_monster.h" | |
16 #include "net/url_request/url_request_context.h" | |
17 #include "net/url_request/url_request_context_getter.h" | |
18 #include "webkit/browser/database/database_tracker.h" | |
19 #include "webkit/browser/fileapi/isolated_context.h" | |
20 #include "webkit/browser/quota/quota_manager.h" | |
21 | |
22 namespace content { | |
23 | |
24 ShellMessageFilter::ShellMessageFilter( | |
25 int render_process_id, | |
26 webkit_database::DatabaseTracker* database_tracker, | |
27 quota::QuotaManager* quota_manager, | |
28 net::URLRequestContextGetter* request_context_getter) | |
29 : render_process_id_(render_process_id), | |
30 database_tracker_(database_tracker), | |
31 quota_manager_(quota_manager), | |
32 request_context_getter_(request_context_getter) { | |
33 } | |
34 | |
35 ShellMessageFilter::~ShellMessageFilter() { | |
36 } | |
37 | |
38 void ShellMessageFilter::OverrideThreadForMessage(const IPC::Message& message, | |
39 BrowserThread::ID* thread) { | |
40 if (message.type() == ShellViewHostMsg_ClearAllDatabases::ID) | |
41 *thread = BrowserThread::FILE; | |
42 } | |
43 | |
44 bool ShellMessageFilter::OnMessageReceived(const IPC::Message& message, | |
45 bool* message_was_ok) { | |
46 bool handled = true; | |
47 IPC_BEGIN_MESSAGE_MAP_EX(ShellMessageFilter, message, *message_was_ok) | |
48 IPC_MESSAGE_HANDLER(ShellViewHostMsg_ReadFileToString, OnReadFileToString) | |
49 IPC_MESSAGE_HANDLER(ShellViewHostMsg_RegisterIsolatedFileSystem, | |
50 OnRegisterIsolatedFileSystem) | |
51 IPC_MESSAGE_HANDLER(ShellViewHostMsg_ClearAllDatabases, OnClearAllDatabases) | |
52 IPC_MESSAGE_HANDLER(ShellViewHostMsg_SetDatabaseQuota, OnSetDatabaseQuota) | |
53 IPC_MESSAGE_HANDLER(ShellViewHostMsg_AcceptAllCookies, OnAcceptAllCookies) | |
54 IPC_MESSAGE_HANDLER(ShellViewHostMsg_DeleteAllCookies, OnDeleteAllCookies) | |
55 IPC_MESSAGE_UNHANDLED(handled = false) | |
56 IPC_END_MESSAGE_MAP() | |
57 | |
58 return handled; | |
59 } | |
60 | |
61 void ShellMessageFilter::OnReadFileToString(const base::FilePath& local_file, | |
62 std::string* contents) { | |
63 base::ThreadRestrictions::ScopedAllowIO allow_io; | |
64 file_util::ReadFileToString(local_file, contents); | |
65 } | |
66 | |
67 void ShellMessageFilter::OnRegisterIsolatedFileSystem( | |
68 const std::vector<base::FilePath>& absolute_filenames, | |
69 std::string* filesystem_id) { | |
70 fileapi::IsolatedContext::FileInfoSet files; | |
71 ChildProcessSecurityPolicy* policy = | |
72 ChildProcessSecurityPolicy::GetInstance(); | |
73 for (size_t i = 0; i < absolute_filenames.size(); ++i) { | |
74 files.AddPath(absolute_filenames[i], NULL); | |
75 if (!policy->CanReadFile(render_process_id_, absolute_filenames[i])) | |
76 policy->GrantReadFile(render_process_id_, absolute_filenames[i]); | |
77 } | |
78 *filesystem_id = | |
79 fileapi::IsolatedContext::GetInstance()->RegisterDraggedFileSystem(files); | |
80 policy->GrantReadFileSystem(render_process_id_, *filesystem_id); | |
81 } | |
82 | |
83 void ShellMessageFilter::OnClearAllDatabases() { | |
84 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); | |
85 database_tracker_->DeleteDataModifiedSince( | |
86 base::Time(), net::CompletionCallback()); | |
87 } | |
88 | |
89 void ShellMessageFilter::OnSetDatabaseQuota(int quota) { | |
90 quota_manager_->SetTemporaryGlobalOverrideQuota( | |
91 quota * quota::QuotaManager::kPerHostTemporaryPortion, | |
92 quota::QuotaCallback()); | |
93 } | |
94 | |
95 void ShellMessageFilter::OnAcceptAllCookies(bool accept) { | |
96 ShellNetworkDelegate::SetAcceptAllCookies(accept); | |
97 } | |
98 | |
99 void ShellMessageFilter::OnDeleteAllCookies() { | |
100 request_context_getter_->GetURLRequestContext()->cookie_store() | |
101 ->GetCookieMonster() | |
102 ->DeleteAllAsync(net::CookieMonster::DeleteCallback()); | |
103 } | |
104 | |
105 } // namespace content | |
OLD | NEW |