Upstream version 11.40.271.0
[platform/framework/web/crosswalk.git] / src / content / shell / browser / layout_test / layout_test_message_filter.cc
1 // Copyright 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/browser/layout_test/layout_test_message_filter.h"
6
7 #include "base/files/file_util.h"
8 #include "base/threading/thread_restrictions.h"
9 #include "content/public/browser/child_process_security_policy.h"
10 #include "content/shell/browser/layout_test/layout_test_content_browser_client.h"
11 #include "content/shell/browser/layout_test/layout_test_notification_manager.h"
12 #include "content/shell/browser/shell_browser_context.h"
13 #include "content/shell/browser/shell_content_browser_client.h"
14 #include "content/shell/browser/shell_network_delegate.h"
15 #include "content/shell/common/layout_test/layout_test_messages.h"
16 #include "net/base/net_errors.h"
17 #include "net/cookies/cookie_monster.h"
18 #include "net/url_request/url_request_context.h"
19 #include "net/url_request/url_request_context_getter.h"
20 #include "storage/browser/database/database_tracker.h"
21 #include "storage/browser/fileapi/isolated_context.h"
22 #include "storage/browser/quota/quota_manager.h"
23
24 namespace content {
25
26 LayoutTestMessageFilter::LayoutTestMessageFilter(
27     int render_process_id,
28     storage::DatabaseTracker* database_tracker,
29     storage::QuotaManager* quota_manager,
30     net::URLRequestContextGetter* request_context_getter)
31     : BrowserMessageFilter(LayoutTestMsgStart),
32       render_process_id_(render_process_id),
33       database_tracker_(database_tracker),
34       quota_manager_(quota_manager),
35       request_context_getter_(request_context_getter) {
36 }
37
38 LayoutTestMessageFilter::~LayoutTestMessageFilter() {
39 }
40
41 void LayoutTestMessageFilter::OverrideThreadForMessage(
42     const IPC::Message& message, BrowserThread::ID* thread) {
43   if (message.type() == LayoutTestHostMsg_ClearAllDatabases::ID)
44     *thread = BrowserThread::FILE;
45   if (message.type() == LayoutTestHostMsg_SimulateWebNotificationClick::ID)
46     *thread = BrowserThread::UI;
47 }
48
49 bool LayoutTestMessageFilter::OnMessageReceived(const IPC::Message& message) {
50   bool handled = true;
51   IPC_BEGIN_MESSAGE_MAP(LayoutTestMessageFilter, message)
52     IPC_MESSAGE_HANDLER(LayoutTestHostMsg_ReadFileToString, OnReadFileToString)
53     IPC_MESSAGE_HANDLER(LayoutTestHostMsg_RegisterIsolatedFileSystem,
54                         OnRegisterIsolatedFileSystem)
55     IPC_MESSAGE_HANDLER(LayoutTestHostMsg_ClearAllDatabases,
56                         OnClearAllDatabases)
57     IPC_MESSAGE_HANDLER(LayoutTestHostMsg_SetDatabaseQuota, OnSetDatabaseQuota)
58     IPC_MESSAGE_HANDLER(LayoutTestHostMsg_CheckWebNotificationPermission,
59                         OnCheckWebNotificationPermission)
60     IPC_MESSAGE_HANDLER(LayoutTestHostMsg_GrantWebNotificationPermission,
61                         OnGrantWebNotificationPermission)
62     IPC_MESSAGE_HANDLER(LayoutTestHostMsg_ClearWebNotificationPermissions,
63                         OnClearWebNotificationPermissions)
64     IPC_MESSAGE_HANDLER(LayoutTestHostMsg_SimulateWebNotificationClick,
65                         OnSimulateWebNotificationClick)
66     IPC_MESSAGE_HANDLER(LayoutTestHostMsg_AcceptAllCookies, OnAcceptAllCookies)
67     IPC_MESSAGE_HANDLER(LayoutTestHostMsg_DeleteAllCookies, OnDeleteAllCookies)
68     IPC_MESSAGE_UNHANDLED(handled = false)
69   IPC_END_MESSAGE_MAP()
70
71   return handled;
72 }
73
74 void LayoutTestMessageFilter::OnReadFileToString(
75     const base::FilePath& local_file, std::string* contents) {
76   base::ThreadRestrictions::ScopedAllowIO allow_io;
77   base::ReadFileToString(local_file, contents);
78 }
79
80 void LayoutTestMessageFilter::OnRegisterIsolatedFileSystem(
81     const std::vector<base::FilePath>& absolute_filenames,
82     std::string* filesystem_id) {
83   storage::IsolatedContext::FileInfoSet files;
84   ChildProcessSecurityPolicy* policy =
85       ChildProcessSecurityPolicy::GetInstance();
86   for (size_t i = 0; i < absolute_filenames.size(); ++i) {
87     files.AddPath(absolute_filenames[i], NULL);
88     if (!policy->CanReadFile(render_process_id_, absolute_filenames[i]))
89       policy->GrantReadFile(render_process_id_, absolute_filenames[i]);
90   }
91   *filesystem_id =
92       storage::IsolatedContext::GetInstance()->RegisterDraggedFileSystem(files);
93   policy->GrantReadFileSystem(render_process_id_, *filesystem_id);
94 }
95
96 void LayoutTestMessageFilter::OnClearAllDatabases() {
97   DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
98   database_tracker_->DeleteDataModifiedSince(
99       base::Time(), net::CompletionCallback());
100 }
101
102 void LayoutTestMessageFilter::OnSetDatabaseQuota(int quota) {
103   quota_manager_->SetTemporaryGlobalOverrideQuota(
104       quota * storage::QuotaManager::kPerHostTemporaryPortion,
105       storage::QuotaCallback());
106 }
107
108 void LayoutTestMessageFilter::OnCheckWebNotificationPermission(
109     const GURL& origin, int* result) {
110   LayoutTestNotificationManager* manager =
111       LayoutTestContentBrowserClient::Get()->GetLayoutTestNotificationManager();
112   if (manager)
113     *result = manager->CheckPermission(origin);
114   else
115     *result = blink::WebNotificationPermissionAllowed;
116 }
117
118 void LayoutTestMessageFilter::OnGrantWebNotificationPermission(
119     const GURL& origin, bool permission_granted) {
120   LayoutTestNotificationManager* manager =
121       LayoutTestContentBrowserClient::Get()->GetLayoutTestNotificationManager();
122   if (manager) {
123     manager->SetPermission(origin, permission_granted ?
124         blink::WebNotificationPermissionAllowed :
125         blink::WebNotificationPermissionDenied);
126   }
127 }
128
129 void LayoutTestMessageFilter::OnClearWebNotificationPermissions() {
130   LayoutTestNotificationManager* manager =
131       LayoutTestContentBrowserClient::Get()->GetLayoutTestNotificationManager();
132   if (manager)
133     manager->ClearPermissions();
134 }
135
136 void LayoutTestMessageFilter::OnSimulateWebNotificationClick(
137     const std::string& title) {
138   LayoutTestNotificationManager* manager =
139       LayoutTestContentBrowserClient::Get()->GetLayoutTestNotificationManager();
140   if (manager)
141     manager->SimulateClick(title);
142 }
143
144 void LayoutTestMessageFilter::OnAcceptAllCookies(bool accept) {
145   ShellNetworkDelegate::SetAcceptAllCookies(accept);
146 }
147
148 void LayoutTestMessageFilter::OnDeleteAllCookies() {
149   request_context_getter_->GetURLRequestContext()->cookie_store()
150       ->GetCookieMonster()
151       ->DeleteAllAsync(net::CookieMonster::DeleteCallback());
152 }
153
154 }  // namespace content