OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "components/nacl/browser/nacl_host_message_filter.h" | 5 #include "components/nacl/browser/nacl_host_message_filter.h" |
6 | 6 |
| 7 #include <stddef.h> |
| 8 #include <stdint.h> |
| 9 |
7 #include "base/sys_info.h" | 10 #include "base/sys_info.h" |
| 11 #include "build/build_config.h" |
8 #include "components/nacl/browser/bad_message.h" | 12 #include "components/nacl/browser/bad_message.h" |
9 #include "components/nacl/browser/nacl_browser.h" | 13 #include "components/nacl/browser/nacl_browser.h" |
10 #include "components/nacl/browser/nacl_file_host.h" | 14 #include "components/nacl/browser/nacl_file_host.h" |
11 #include "components/nacl/browser/nacl_process_host.h" | 15 #include "components/nacl/browser/nacl_process_host.h" |
12 #include "components/nacl/browser/pnacl_host.h" | 16 #include "components/nacl/browser/pnacl_host.h" |
13 #include "components/nacl/common/nacl_host_messages.h" | 17 #include "components/nacl/common/nacl_host_messages.h" |
14 #include "content/public/browser/browser_thread.h" | 18 #include "content/public/browser/browser_thread.h" |
15 #include "content/public/browser/plugin_service.h" | 19 #include "content/public/browser/plugin_service.h" |
16 #include "content/public/browser/render_process_host.h" | 20 #include "content/public/browser/render_process_host.h" |
17 #include "content/public/browser/web_contents.h" | 21 #include "content/public/browser/web_contents.h" |
18 #include "ipc/ipc_platform_file.h" | 22 #include "ipc/ipc_platform_file.h" |
19 #include "net/url_request/url_request_context.h" | 23 #include "net/url_request/url_request_context.h" |
20 #include "net/url_request/url_request_context_getter.h" | 24 #include "net/url_request/url_request_context_getter.h" |
21 #include "ppapi/shared_impl/ppapi_permissions.h" | 25 #include "ppapi/shared_impl/ppapi_permissions.h" |
22 #include "url/gurl.h" | 26 #include "url/gurl.h" |
23 | 27 |
24 namespace nacl { | 28 namespace nacl { |
25 | 29 |
26 namespace { | 30 namespace { |
27 | 31 |
28 // The maximum number of resource file handles the browser process accepts. Use | 32 // The maximum number of resource file handles the browser process accepts. Use |
29 // 200 because ARC's nmf has ~128 resource files as of May 2015. This prevents | 33 // 200 because ARC's nmf has ~128 resource files as of May 2015. This prevents |
30 // untrusted code filling the FD/handle table. | 34 // untrusted code filling the FD/handle table. |
31 const size_t kMaxPreOpenResourceFiles = 200; | 35 const size_t kMaxPreOpenResourceFiles = 200; |
32 | 36 |
33 ppapi::PpapiPermissions GetNaClPermissions( | 37 ppapi::PpapiPermissions GetNaClPermissions( |
34 uint32 permission_bits, | 38 uint32_t permission_bits, |
35 content::BrowserContext* browser_context, | 39 content::BrowserContext* browser_context, |
36 const GURL& document_url) { | 40 const GURL& document_url) { |
37 // Only allow NaCl plugins to request certain permissions. We don't want | 41 // Only allow NaCl plugins to request certain permissions. We don't want |
38 // a compromised renderer to be able to start a nacl plugin with e.g. Flash | 42 // a compromised renderer to be able to start a nacl plugin with e.g. Flash |
39 // permissions which may expand the surface area of the sandbox. | 43 // permissions which may expand the surface area of the sandbox. |
40 uint32 masked_bits = permission_bits & ppapi::PERMISSION_DEV; | 44 uint32_t masked_bits = permission_bits & ppapi::PERMISSION_DEV; |
41 if (content::PluginService::GetInstance()->PpapiDevChannelSupported( | 45 if (content::PluginService::GetInstance()->PpapiDevChannelSupported( |
42 browser_context, document_url)) | 46 browser_context, document_url)) |
43 masked_bits |= ppapi::PERMISSION_DEV_CHANNEL; | 47 masked_bits |= ppapi::PERMISSION_DEV_CHANNEL; |
44 return ppapi::PpapiPermissions::GetForCommandLine(masked_bits); | 48 return ppapi::PpapiPermissions::GetForCommandLine(masked_bits); |
45 } | 49 } |
46 | 50 |
47 | 51 ppapi::PpapiPermissions GetPpapiPermissions(uint32_t permission_bits, |
48 ppapi::PpapiPermissions GetPpapiPermissions(uint32 permission_bits, | |
49 int render_process_id, | 52 int render_process_id, |
50 int render_view_id) { | 53 int render_view_id) { |
51 // We get the URL from WebContents from the RenderViewHost, since we don't | 54 // We get the URL from WebContents from the RenderViewHost, since we don't |
52 // have a BrowserPpapiHost yet. | 55 // have a BrowserPpapiHost yet. |
53 content::RenderProcessHost* host = | 56 content::RenderProcessHost* host = |
54 content::RenderProcessHost::FromID(render_process_id); | 57 content::RenderProcessHost::FromID(render_process_id); |
55 content::RenderViewHost* view_host = | 58 content::RenderViewHost* view_host = |
56 content::RenderViewHost::FromID(render_process_id, render_view_id); | 59 content::RenderViewHost::FromID(render_process_id, render_view_id); |
57 if (!view_host) | 60 if (!view_host) |
58 return ppapi::PpapiPermissions(); | 61 return ppapi::PpapiPermissions(); |
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
120 return request_context_->GetURLRequestContext()->host_resolver(); | 123 return request_context_->GetURLRequestContext()->host_resolver(); |
121 } | 124 } |
122 | 125 |
123 void NaClHostMessageFilter::OnLaunchNaCl( | 126 void NaClHostMessageFilter::OnLaunchNaCl( |
124 const nacl::NaClLaunchParams& launch_params, | 127 const nacl::NaClLaunchParams& launch_params, |
125 IPC::Message* reply_msg) { | 128 IPC::Message* reply_msg) { |
126 // If we're running llc or ld for the PNaCl translator, we don't need to look | 129 // If we're running llc or ld for the PNaCl translator, we don't need to look |
127 // up permissions, and we don't have the right browser state to look up some | 130 // up permissions, and we don't have the right browser state to look up some |
128 // of the whitelisting parameters anyway. | 131 // of the whitelisting parameters anyway. |
129 if (launch_params.process_type == kPNaClTranslatorProcessType) { | 132 if (launch_params.process_type == kPNaClTranslatorProcessType) { |
130 uint32 perms = launch_params.permission_bits & ppapi::PERMISSION_DEV; | 133 uint32_t perms = launch_params.permission_bits & ppapi::PERMISSION_DEV; |
131 LaunchNaClContinuationOnIOThread( | 134 LaunchNaClContinuationOnIOThread( |
132 launch_params, | 135 launch_params, |
133 reply_msg, | 136 reply_msg, |
134 std::vector<NaClResourcePrefetchResult>(), | 137 std::vector<NaClResourcePrefetchResult>(), |
135 ppapi::PpapiPermissions(perms)); | 138 ppapi::PpapiPermissions(perms)); |
136 return; | 139 return; |
137 } | 140 } |
138 content::BrowserThread::PostTask( | 141 content::BrowserThread::PostTask( |
139 content::BrowserThread::UI, | 142 content::BrowserThread::UI, |
140 FROM_HERE, | 143 FROM_HERE, |
(...skipping 258 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
399 reply_msg); | 402 reply_msg); |
400 } | 403 } |
401 | 404 |
402 void NaClHostMessageFilter::OnNaClDebugEnabledForURL(const GURL& nmf_url, | 405 void NaClHostMessageFilter::OnNaClDebugEnabledForURL(const GURL& nmf_url, |
403 bool* should_debug) { | 406 bool* should_debug) { |
404 *should_debug = | 407 *should_debug = |
405 nacl::NaClBrowser::GetDelegate()->URLMatchesDebugPatterns(nmf_url); | 408 nacl::NaClBrowser::GetDelegate()->URLMatchesDebugPatterns(nmf_url); |
406 } | 409 } |
407 | 410 |
408 } // namespace nacl | 411 } // namespace nacl |
OLD | NEW |