Chromium Code Reviews
[email protected] (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(47)

Side by Side Diff: chrome/common/chrome_content_client.cc

Issue 6869051: Move PepperPluginRegistry to content, while leaving the Chrome specific bits (NaCl, registration ... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 9 years, 8 months 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
« no previous file with comments | « chrome/common/chrome_content_client.h ('k') | chrome/common/pepper_plugin_registry.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 "chrome/common/chrome_content_client.h" 5 #include "chrome/common/chrome_content_client.h"
6 6
7 #include "base/command_line.h"
8 #include "base/file_util.h"
9 #include "base/path_service.h"
10 #include "base/string_split.h"
11 #include "base/string_util.h"
7 #include "chrome/common/child_process_logging.h" 12 #include "chrome/common/child_process_logging.h"
13 #include "chrome/common/chrome_paths.h"
14 #include "chrome/common/chrome_switches.h"
15 #include "content/common/pepper_plugin_registry.h"
16 #include "remoting/client/plugin/pepper_entrypoints.h"
17
18 namespace {
brettw 2011/04/18 05:02:12 Blank line after this.
19 const char* kPDFPluginName = "Chrome PDF Viewer";
20 const char* kPDFPluginMimeType = "application/pdf";
21 const char* kPDFPluginExtension = "pdf";
22 const char* kPDFPluginDescription = "Portable Document Format";
23
24 const char* kNaClPluginName = "Chrome NaCl";
25 const char* kNaClPluginMimeType = "application/x-nacl";
26 const char* kNaClPluginExtension = "nexe";
27 const char* kNaClPluginDescription = "Native Client Executable";
28
29 #if defined(ENABLE_REMOTING)
30 const char* kRemotingPluginMimeType = "pepper-application/x-chromoting";
31 #endif
32
33 const char* kFlashPluginName = "Shockwave Flash";
34 const char* kFlashPluginSwfMimeType = "application/x-shockwave-flash";
35 const char* kFlashPluginSwfExtension = "swf";
36 const char* kFlashPluginSwfDescription = "Shockwave Flash";
37 const char* kFlashPluginSplMimeType = "application/futuresplash";
38 const char* kFlashPluginSplExtension = "spl";
39 const char* kFlashPluginSplDescription = "FutureSplash Player";
40
41 #if !defined(NACL_WIN64) // The code this needs isn't linked on Win64 builds.
42
43 // Appends the known built-in plugins to the given vector. Some built-in
44 // plugins are "internal" which means they are compiled into the Chrome binary,
45 // and some are extra shared libraries distributed with the browser (these are
46 // not marked internal, aside from being automatically registered, they're just
47 // regular plugins).
48 void ComputeBuiltInPlugins(std::vector<PepperPluginInfo>* plugins) {
49 // PDF.
50 //
51 // Once we're sandboxed, we can't know if the PDF plugin is available or not;
52 // but (on Linux) this function is always called once before we're sandboxed.
53 // So the first time through test if the file is available and then skip the
54 // check on subsequent calls if yes.
55 static bool skip_pdf_file_check = false;
56 FilePath path;
57 if (PathService::Get(chrome::FILE_PDF_PLUGIN, &path)) {
58 if (skip_pdf_file_check || file_util::PathExists(path)) {
59 PepperPluginInfo pdf;
60 pdf.path = path;
61 pdf.name = kPDFPluginName;
62 webkit::npapi::WebPluginMimeType pdf_mime_type(kPDFPluginMimeType,
63 kPDFPluginExtension,
64 kPDFPluginDescription);
65 pdf.mime_types.push_back(pdf_mime_type);
66 plugins->push_back(pdf);
67
68 skip_pdf_file_check = true;
69 }
70 }
71
72 // Handle the Native Client plugin just like the PDF plugin.
73 static bool skip_nacl_file_check = false;
74 if (PathService::Get(chrome::FILE_NACL_PLUGIN, &path)) {
75 if (skip_nacl_file_check || file_util::PathExists(path)) {
76 PepperPluginInfo nacl;
77 nacl.path = path;
78 nacl.name = kNaClPluginName;
79 // Enable the Native Client Plugin based on the command line.
80 nacl.enabled = CommandLine::ForCurrentProcess()->HasSwitch(
81 switches::kEnableNaCl);
82 webkit::npapi::WebPluginMimeType nacl_mime_type(kNaClPluginMimeType,
83 kNaClPluginExtension,
84 kNaClPluginDescription);
85 nacl.mime_types.push_back(nacl_mime_type);
86 plugins->push_back(nacl);
87
88 skip_nacl_file_check = true;
89 }
90 }
91
92 // Remoting.
93 #if defined(ENABLE_REMOTING)
94 if (CommandLine::ForCurrentProcess()->HasSwitch(
95 switches::kEnableRemoting)) {
96 PepperPluginInfo info;
97 info.is_internal = true;
98 info.path = FilePath(FILE_PATH_LITERAL("internal-chromoting"));
99 webkit::npapi::WebPluginMimeType remoting_mime_type(kRemotingPluginMimeType,
100 std::string(),
101 std::string());
102 info.mime_types.push_back(remoting_mime_type);
103 info.internal_entry_points.get_interface = remoting::PPP_GetInterface;
104 info.internal_entry_points.initialize_module =
105 remoting::PPP_InitializeModule;
106 info.internal_entry_points.shutdown_module = remoting::PPP_ShutdownModule;
107
108 plugins->push_back(info);
109 }
110 #endif
111 }
112
113 void AddOutOfProcessFlash(std::vector<PepperPluginInfo>* plugins) {
114 // Flash being out of process is handled separately than general plugins
115 // for testing purposes.
116 bool flash_out_of_process = !CommandLine::ForCurrentProcess()->HasSwitch(
117 switches::kPpapiFlashInProcess);
118
119 // Handle any Pepper Flash first.
120 const CommandLine::StringType flash_path =
121 CommandLine::ForCurrentProcess()->GetSwitchValueNative(
122 switches::kPpapiFlashPath);
123 if (flash_path.empty())
124 return;
125
126 PepperPluginInfo plugin;
127 plugin.is_out_of_process = flash_out_of_process;
128 plugin.path = FilePath(flash_path);
129 plugin.name = kFlashPluginName;
130
131 const std::string flash_version =
132 CommandLine::ForCurrentProcess()->GetSwitchValueASCII(
133 switches::kPpapiFlashVersion);
134 std::vector<std::string> flash_version_numbers;
135 base::SplitString(flash_version, '.', &flash_version_numbers);
136 if (flash_version_numbers.size() < 1)
137 flash_version_numbers.push_back("10");
138 // |SplitString()| puts in an empty string given an empty string. :(
139 else if (flash_version_numbers[0].empty())
140 flash_version_numbers[0] = "10";
141 if (flash_version_numbers.size() < 2)
142 flash_version_numbers.push_back("2");
143 if (flash_version_numbers.size() < 3)
144 flash_version_numbers.push_back("999");
145 if (flash_version_numbers.size() < 4)
146 flash_version_numbers.push_back("999");
147 // E.g., "Shockwave Flash 10.2 r154":
148 plugin.description = plugin.name + " " + flash_version_numbers[0] + "." +
149 flash_version_numbers[1] + " r" + flash_version_numbers[2];
150 plugin.version = JoinString(flash_version_numbers, '.');
151 webkit::npapi::WebPluginMimeType swf_mime_type(kFlashPluginSwfMimeType,
152 kFlashPluginSwfExtension,
153 kFlashPluginSwfDescription);
154 plugin.mime_types.push_back(swf_mime_type);
155 webkit::npapi::WebPluginMimeType spl_mime_type(kFlashPluginSplMimeType,
156 kFlashPluginSplExtension,
157 kFlashPluginSplDescription);
158 plugin.mime_types.push_back(spl_mime_type);
159 plugins->push_back(plugin);
160 }
161
162 #endif // !defined(NACL_WIN64)
163
164 } // namespace
8 165
9 namespace chrome { 166 namespace chrome {
10 167
168 const char* ChromeContentClient::kPDFPluginName = ::kPDFPluginName;
169
11 void ChromeContentClient::SetActiveURL(const GURL& url) { 170 void ChromeContentClient::SetActiveURL(const GURL& url) {
12 child_process_logging::SetActiveURL(url); 171 child_process_logging::SetActiveURL(url);
13 } 172 }
14 173
15 void ChromeContentClient::SetGpuInfo(const GPUInfo& gpu_info) { 174 void ChromeContentClient::SetGpuInfo(const GPUInfo& gpu_info) {
16 child_process_logging::SetGpuInfo(gpu_info); 175 child_process_logging::SetGpuInfo(gpu_info);
17 } 176 }
18 177
178 void ChromeContentClient::AddPepperPlugins(
179 std::vector<PepperPluginInfo>* plugins) {
180 #if !defined(NACL_WIN64) // The code this needs isn't linked on Win64 builds.
181 ComputeBuiltInPlugins(plugins);
182 AddOutOfProcessFlash(plugins);
183 #endif
184 }
185
19 } // namespace chrome 186 } // namespace chrome
OLDNEW
« no previous file with comments | « chrome/common/chrome_content_client.h ('k') | chrome/common/pepper_plugin_registry.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698