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

Side by Side Diff: chrome/app/chrome_dll_main.cc

Issue 64003: Fix for invocation over deprecated protocol handler... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 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 | « no previous file | no next file » | 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) 2006-2008 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2006-2008 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 // TODO(port): the ifdefs in here are a first step towards trying to determine 5 // TODO(port): the ifdefs in here are a first step towards trying to determine
6 // the correct abstraction for all the OS functionality required at this 6 // the correct abstraction for all the OS functionality required at this
7 // stage of process initialization. It should not be taken as a final 7 // stage of process initialization. It should not be taken as a final
8 // abstraction. 8 // abstraction.
9 9
10 #include "build/build_config.h" 10 #include "build/build_config.h"
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
118 // Get the breakpad pointer from chrome.exe 118 // Get the breakpad pointer from chrome.exe
119 typedef void (__stdcall *DumpProcessFunction)(); 119 typedef void (__stdcall *DumpProcessFunction)();
120 DumpProcessFunction DumpProcess = reinterpret_cast<DumpProcessFunction>( 120 DumpProcessFunction DumpProcess = reinterpret_cast<DumpProcessFunction>(
121 ::GetProcAddress(::GetModuleHandle(L"chrome.exe"), "DumpProcess")); 121 ::GetProcAddress(::GetModuleHandle(L"chrome.exe"), "DumpProcess"));
122 if (DumpProcess) 122 if (DumpProcess)
123 DumpProcess(); 123 DumpProcess();
124 } 124 }
125 125
126 #pragma optimize("", on) 126 #pragma optimize("", on)
127 127
128 // Early versions of Chrome incorrectly registered a chromehtml: URL handler. 128 // Early versions of Chrome incorrectly registered a chromehtml: URL handler,
129 // Later versions fixed the registration but in some cases (e.g. Vista and non- 129 // which gives us nothing but trouble. Avoid launching chrome this way since
130 // admin installs) the fix could not be applied. This prevents Chrome to be 130 // some apps fail to properly escape arguments.
131 // launched with the incorrect format. 131 bool HasDeprecatedArguments(const std::wstring& command_line) {
132 // CORRECT: <broser.exe> -- "chromehtml:<url>" 132 const wchar_t kChromeHtml[] = L"chromehtml:";
133 // INVALID: <broser.exe> "chromehtml:<url>"
134 bool IncorrectChromeHtmlArguments(const std::wstring& command_line) {
135 const wchar_t kChromeHtml[] = L"-- \"chromehtml:";
136 const wchar_t kOffset = 5; // Where chromehtml: starts in above
137 std::wstring command_line_lower = command_line; 133 std::wstring command_line_lower = command_line;
138
139 // We are only searching for ASCII characters so this is OK. 134 // We are only searching for ASCII characters so this is OK.
140 StringToLowerASCII(&command_line_lower); 135 StringToLowerASCII(&command_line_lower);
141 136 std::wstring::size_type pos = command_line_lower.find(kChromeHtml);
142 std::wstring::size_type pos = command_line_lower.find( 137 return (pos != std::wstring::npos);
143 kChromeHtml + kOffset);
144
145 if (pos == std::wstring::npos)
146 return false;
147
148 // The browser is being launched with chromehtml: somewhere on the command
149 // line. We will not launch unless it's preceded by the -- switch terminator.
150 if (pos >= kOffset) {
151 if (equal(kChromeHtml, kChromeHtml + arraysize(kChromeHtml) - 1,
152 command_line_lower.begin() + pos - kOffset)) {
153 return false;
154 }
155 }
156
157 return true;
158 } 138 }
159 139
160 #endif // OS_WIN 140 #endif // OS_WIN
161 141
162 #if defined(OS_LINUX) 142 #if defined(OS_LINUX)
163 static void GLibLogHandler(const gchar* log_domain, 143 static void GLibLogHandler(const gchar* log_domain,
164 GLogLevelFlags log_level, 144 GLogLevelFlags log_level,
165 const gchar* message, 145 const gchar* message,
166 gpointer userdata) { 146 gpointer userdata) {
167 if (!log_domain) 147 if (!log_domain)
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after
293 // Initialize the command line. 273 // Initialize the command line.
294 #if defined(OS_WIN) 274 #if defined(OS_WIN)
295 CommandLine::Init(0, NULL); 275 CommandLine::Init(0, NULL);
296 #else 276 #else
297 CommandLine::Init(argc, argv); 277 CommandLine::Init(argc, argv);
298 #endif 278 #endif
299 const CommandLine& parsed_command_line = *CommandLine::ForCurrentProcess(); 279 const CommandLine& parsed_command_line = *CommandLine::ForCurrentProcess();
300 280
301 #if defined(OS_WIN) 281 #if defined(OS_WIN)
302 // Must do this before any other usage of command line! 282 // Must do this before any other usage of command line!
303 if (::IncorrectChromeHtmlArguments(parsed_command_line.command_line_string())) 283 if (HasDeprecatedArguments(parsed_command_line.command_line_string()))
304 return 1; 284 return 1;
305 #endif 285 #endif
306 286
307 int browser_pid; 287 int browser_pid;
308 std::wstring process_type = 288 std::wstring process_type =
309 parsed_command_line.GetSwitchValue(switches::kProcessType); 289 parsed_command_line.GetSwitchValue(switches::kProcessType);
310 if (process_type.empty()) { 290 if (process_type.empty()) {
311 browser_pid = base::GetCurrentProcId(); 291 browser_pid = base::GetCurrentProcId();
312 } else { 292 } else {
313 std::wstring channel_name = 293 std::wstring channel_name =
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after
446 _CrtDumpMemoryLeaks(); 426 _CrtDumpMemoryLeaks();
447 #endif // _CRTDBG_MAP_ALLOC 427 #endif // _CRTDBG_MAP_ALLOC
448 428
449 _Module.Term(); 429 _Module.Term();
450 #endif 430 #endif
451 431
452 logging::CleanupChromeLogging(); 432 logging::CleanupChromeLogging();
453 433
454 return rv; 434 return rv;
455 } 435 }
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698