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

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

Issue 27031002: Move checking of configured policy on win to breakpad client (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: updates Created 7 years, 2 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 | chrome/app/chrome_breakpad_client.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) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/app/breakpad_win.h" 5 #include "chrome/app/breakpad_win.h"
6 6
7 #include <shellapi.h> 7 #include <shellapi.h>
8 #include <tchar.h> 8 #include <tchar.h>
9 #include <userenv.h> 9 #include <userenv.h>
10 #include <windows.h> 10 #include <windows.h>
(...skipping 15 matching lines...) Expand all
26 #include "base/strings/utf_string_conversions.h" 26 #include "base/strings/utf_string_conversions.h"
27 #include "base/win/metro.h" 27 #include "base/win/metro.h"
28 #include "base/win/pe_image.h" 28 #include "base/win/pe_image.h"
29 #include "base/win/registry.h" 29 #include "base/win/registry.h"
30 #include "base/win/win_util.h" 30 #include "base/win/win_util.h"
31 #include "breakpad/src/client/windows/handler/exception_handler.h" 31 #include "breakpad/src/client/windows/handler/exception_handler.h"
32 #include "chrome/app/hard_error_handler_win.h" 32 #include "chrome/app/hard_error_handler_win.h"
33 #include "components/breakpad/breakpad_client.h" 33 #include "components/breakpad/breakpad_client.h"
34 #include "content/public/common/content_switches.h" 34 #include "content/public/common/content_switches.h"
35 #include "content/public/common/result_codes.h" 35 #include "content/public/common/result_codes.h"
36 #include "policy/policy_constants.h"
37 #include "sandbox/win/src/nt_internals.h" 36 #include "sandbox/win/src/nt_internals.h"
38 #include "sandbox/win/src/sidestep/preamble_patcher.h" 37 #include "sandbox/win/src/sidestep/preamble_patcher.h"
39 38
40 // userenv.dll is required for GetProfileType(). 39 // userenv.dll is required for GetProfileType().
41 #pragma comment(lib, "userenv.lib") 40 #pragma comment(lib, "userenv.lib")
42 41
43 #pragma intrinsic(_AddressOfReturnAddress) 42 #pragma intrinsic(_AddressOfReturnAddress)
44 #pragma intrinsic(_ReturnAddress) 43 #pragma intrinsic(_ReturnAddress)
45 44
46 namespace breakpad_win { 45 namespace breakpad_win {
(...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after
208 size_t chunk_length = std::min(kChunkSize, path.size() - chunk_start); 207 size_t chunk_length = std::min(kChunkSize, path.size() - chunk_start);
209 208
210 g_custom_entries->push_back(google_breakpad::CustomInfoEntry( 209 g_custom_entries->push_back(google_breakpad::CustomInfoEntry(
211 base::StringPrintf(L"plugin-path-chunk-%i", chunk_index + 1).c_str(), 210 base::StringPrintf(L"plugin-path-chunk-%i", chunk_index + 1).c_str(),
212 path.substr(chunk_start, chunk_length).c_str())); 211 path.substr(chunk_start, chunk_length).c_str()));
213 212
214 chunk_start += chunk_length; 213 chunk_start += chunk_length;
215 } 214 }
216 } 215 }
217 216
218 // Determine whether configuration management allows loading the crash reporter.
219 // Since the configuration management infrastructure is not initialized at this
220 // point, we read the corresponding registry key directly. The return status
221 // indicates whether policy data was successfully read. If it is true, |result|
222 // contains the value set by policy.
223 static bool MetricsReportingControlledByPolicy(bool* result) {
224 string16 key_name = UTF8ToUTF16(policy::key::kMetricsReportingEnabled);
225 DWORD value = 0;
226 base::win::RegKey hklm_policy_key(HKEY_LOCAL_MACHINE,
227 policy::kRegistryChromePolicyKey, KEY_READ);
228 if (hklm_policy_key.ReadValueDW(key_name.c_str(), &value) == ERROR_SUCCESS) {
229 *result = value != 0;
230 return true;
231 }
232
233 base::win::RegKey hkcu_policy_key(HKEY_CURRENT_USER,
234 policy::kRegistryChromePolicyKey, KEY_READ);
235 if (hkcu_policy_key.ReadValueDW(key_name.c_str(), &value) == ERROR_SUCCESS) {
236 *result = value != 0;
237 return true;
238 }
239
240 return false;
241 }
242
243 // Appends the breakpad dump path to |g_custom_entries|. 217 // Appends the breakpad dump path to |g_custom_entries|.
244 void SetBreakpadDumpPath() { 218 void SetBreakpadDumpPath() {
245 DCHECK(g_custom_entries); 219 DCHECK(g_custom_entries);
246 base::FilePath crash_dumps_dir_path; 220 base::FilePath crash_dumps_dir_path;
247 if (breakpad::GetBreakpadClient()->GetAlternativeCrashDumpLocation( 221 if (breakpad::GetBreakpadClient()->GetAlternativeCrashDumpLocation(
248 &crash_dumps_dir_path)) { 222 &crash_dumps_dir_path)) {
249 g_custom_entries->push_back(google_breakpad::CustomInfoEntry( 223 g_custom_entries->push_back(google_breakpad::CustomInfoEntry(
250 L"breakpad-dump-location", crash_dumps_dir_path.value().c_str())); 224 L"breakpad-dump-location", crash_dumps_dir_path.value().c_str()));
251 } 225 }
252 } 226 }
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
323 if (type == L"plugin" || type == L"ppapi") { 297 if (type == L"plugin" || type == L"ppapi") {
324 std::wstring plugin_path = 298 std::wstring plugin_path =
325 CommandLine::ForCurrentProcess()->GetSwitchValueNative("plugin-path"); 299 CommandLine::ForCurrentProcess()->GetSwitchValueNative("plugin-path");
326 if (!plugin_path.empty()) 300 if (!plugin_path.empty())
327 SetPluginPath(plugin_path); 301 SetPluginPath(plugin_path);
328 } 302 }
329 303
330 // Check whether configuration management controls crash reporting. 304 // Check whether configuration management controls crash reporting.
331 bool crash_reporting_enabled = true; 305 bool crash_reporting_enabled = true;
332 bool controlled_by_policy = 306 bool controlled_by_policy =
333 MetricsReportingControlledByPolicy(&crash_reporting_enabled); 307 breakpad::GetBreakpadClient()->ReportingIsEnforcedByPolicy(
308 &crash_reporting_enabled);
334 const CommandLine& command = *CommandLine::ForCurrentProcess(); 309 const CommandLine& command = *CommandLine::ForCurrentProcess();
335 bool use_crash_service = 310 bool use_crash_service =
336 !controlled_by_policy && 311 !controlled_by_policy &&
337 (command.HasSwitch(switches::kNoErrorDialogs) || 312 (command.HasSwitch(switches::kNoErrorDialogs) ||
338 breakpad::GetBreakpadClient()->IsRunningUnattended()); 313 breakpad::GetBreakpadClient()->IsRunningUnattended());
339 if (use_crash_service) 314 if (use_crash_service)
340 SetBreakpadDumpPath(); 315 SetBreakpadDumpPath();
341 316
342 // Create space for dynamic ad-hoc keys. The names and values are set using 317 // Create space for dynamic ad-hoc keys. The names and values are set using
343 // the API defined in base/debug/crash_logging.h. 318 // the API defined in base/debug/crash_logging.h.
(...skipping 301 matching lines...) Expand 10 before | Expand all | Expand 10 after
645 static void InitPipeNameEnvVar(bool is_per_user_install) { 620 static void InitPipeNameEnvVar(bool is_per_user_install) {
646 scoped_ptr<base::Environment> env(base::Environment::Create()); 621 scoped_ptr<base::Environment> env(base::Environment::Create());
647 if (env->HasVar(kPipeNameVar)) { 622 if (env->HasVar(kPipeNameVar)) {
648 // The Breakpad pipe name is already configured: nothing to do. 623 // The Breakpad pipe name is already configured: nothing to do.
649 return; 624 return;
650 } 625 }
651 626
652 // Check whether configuration management controls crash reporting. 627 // Check whether configuration management controls crash reporting.
653 bool crash_reporting_enabled = true; 628 bool crash_reporting_enabled = true;
654 bool controlled_by_policy = 629 bool controlled_by_policy =
655 MetricsReportingControlledByPolicy(&crash_reporting_enabled); 630 breakpad::GetBreakpadClient()->ReportingIsEnforcedByPolicy(
631 &crash_reporting_enabled);
656 632
657 const CommandLine& command = *CommandLine::ForCurrentProcess(); 633 const CommandLine& command = *CommandLine::ForCurrentProcess();
658 bool use_crash_service = 634 bool use_crash_service =
659 !controlled_by_policy && 635 !controlled_by_policy &&
660 (command.HasSwitch(switches::kNoErrorDialogs) || 636 (command.HasSwitch(switches::kNoErrorDialogs) ||
661 breakpad::GetBreakpadClient()->IsRunningUnattended()); 637 breakpad::GetBreakpadClient()->IsRunningUnattended());
662 638
663 std::wstring pipe_name; 639 std::wstring pipe_name;
664 if (use_crash_service) { 640 if (use_crash_service) {
665 // Crash reporting is done by crash_service.exe. 641 // Crash reporting is done by crash_service.exe.
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after
803 // Initialize the hook TerminateProcess to catch unexpected exits. 779 // Initialize the hook TerminateProcess to catch unexpected exits.
804 InitTerminateProcessHooks(); 780 InitTerminateProcessHooks();
805 } 781 }
806 #endif 782 #endif
807 } 783 }
808 } 784 }
809 785
810 void InitDefaultCrashCallback(LPTOP_LEVEL_EXCEPTION_FILTER filter) { 786 void InitDefaultCrashCallback(LPTOP_LEVEL_EXCEPTION_FILTER filter) {
811 previous_filter = SetUnhandledExceptionFilter(filter); 787 previous_filter = SetUnhandledExceptionFilter(filter);
812 } 788 }
OLDNEW
« no previous file with comments | « no previous file | chrome/app/chrome_breakpad_client.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698