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

Side by Side Diff: content/ppapi_plugin/ppapi_thread.cc

Issue 2849163003: media: Move the callsite of CdmHostFiles::InitVerification() (Closed)
Patch Set: windows-only Created 3 years, 7 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
« no previous file with comments | « content/common/media/cdm_host_files.cc ('k') | 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) 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 "content/ppapi_plugin/ppapi_thread.h" 5 #include "content/ppapi_plugin/ppapi_thread.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <limits> 9 #include <limits>
10 10
(...skipping 372 matching lines...) Expand 10 before | Expand all | Expand 10 after
383 383
384 #if defined(OS_WIN) || defined(OS_MACOSX) 384 #if defined(OS_WIN) || defined(OS_MACOSX)
385 // Open CDM host files before the process is sandboxed. 385 // Open CDM host files before the process is sandboxed.
386 if (!is_broker_ && IsCdm(path)) 386 if (!is_broker_ && IsCdm(path))
387 cdm_host_files = CdmHostFiles::Create(path); 387 cdm_host_files = CdmHostFiles::Create(path);
388 #elif defined(OS_LINUX) 388 #elif defined(OS_LINUX)
389 cdm_host_files = CdmHostFiles::TakeGlobalInstance(); 389 cdm_host_files = CdmHostFiles::TakeGlobalInstance();
390 if (is_broker_ || !IsCdm(path)) 390 if (is_broker_ || !IsCdm(path))
391 cdm_host_files.reset(); // Close all opened files. 391 cdm_host_files.reset(); // Close all opened files.
392 #endif // defined(OS_WIN) || defined(OS_MACOSX) 392 #endif // defined(OS_WIN) || defined(OS_MACOSX)
393
394 #if defined(OS_WIN)
395 // On Windows, initialize CDM host verification unsandboxed. On other
396 // platforms, this is called sandboxed below.
397 if (cdm_host_files) {
398 DCHECK(IsCdm(path));
399 if (!cdm_host_files->InitVerification(library.get(), path)) {
400 LOG(WARNING) << "CDM host verification failed.";
401 // TODO(xhwang): Add a new load result if needed.
402 ReportLoadResult(path, INIT_FAILED);
403 return;
404 }
405 }
406 #endif // defined(OS_WIN)
393 #endif // BUILDFLAG(ENABLE_CDM_HOST_VERIFICATION) 407 #endif // BUILDFLAG(ENABLE_CDM_HOST_VERIFICATION)
394 408
395 #if defined(OS_WIN) 409 #if defined(OS_WIN)
396 // If code subsequently tries to exit using abort(), force a crash (since 410 // If code subsequently tries to exit using abort(), force a crash (since
397 // otherwise these would be silent terminations and fly under the radar). 411 // otherwise these would be silent terminations and fly under the radar).
398 base::win::SetAbortBehaviorForCrashReporting(); 412 base::win::SetAbortBehaviorForCrashReporting();
399 413
400 // Once we lower the token the sandbox is locked down and no new modules 414 // Once we lower the token the sandbox is locked down and no new modules
401 // can be loaded. TODO(cpu): consider changing to the loading style of 415 // can be loaded. TODO(cpu): consider changing to the loading style of
402 // regular plugins. 416 // regular plugins.
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
463 return; 477 return;
464 } 478 }
465 } else { 479 } else {
466 #if defined(OS_MACOSX) 480 #if defined(OS_MACOSX)
467 // We need to do this after getting |PPP_GetInterface()| (or presumably 481 // We need to do this after getting |PPP_GetInterface()| (or presumably
468 // doing something nontrivial with the library), else the sandbox 482 // doing something nontrivial with the library), else the sandbox
469 // intercedes. 483 // intercedes.
470 CHECK(InitializeSandbox()); 484 CHECK(InitializeSandbox());
471 #endif 485 #endif
472 486
473 int32_t init_error = plugin_entry_points_.initialize_module( 487 #if BUILDFLAG(ENABLE_CDM_HOST_VERIFICATION) && !defined(OS_WIN)
474 local_pp_module_, 488 // Now we are sandboxed, initialize CDM host verification.
475 &ppapi::proxy::PluginDispatcher::GetBrowserInterface);
476 if (init_error != PP_OK) {
477 LOG(WARNING) << "InitModule failed with error " << init_error;
478 ReportLoadResult(path, INIT_FAILED);
479 return;
480 }
481 #if BUILDFLAG(ENABLE_CDM_HOST_VERIFICATION)
482 // Now the process is sandboxed. Verify CDM host.
483 if (cdm_host_files) { 489 if (cdm_host_files) {
484 DCHECK(IsCdm(path)); 490 DCHECK(IsCdm(path));
485 if (!cdm_host_files->VerifyFiles(library.get(), path)) { 491 if (!cdm_host_files->InitVerification(library.get(), path)) {
486 LOG(WARNING) << "CDM host verification failed."; 492 LOG(WARNING) << "CDM host verification failed.";
487 // TODO(xhwang): Add a new load result if needed. 493 // TODO(xhwang): Add a new load result if needed.
488 ReportLoadResult(path, INIT_FAILED); 494 ReportLoadResult(path, INIT_FAILED);
489 return; 495 return;
490 } 496 }
491 } 497 }
492 #endif // BUILDFLAG(ENABLE_CDM_HOST_VERIFICATION) 498 #endif // BUILDFLAG(ENABLE_CDM_HOST_VERIFICATION) && !defined(OS_WIN)
xhwang 2017/05/01 23:57:00 Move this to be above "initialize_module" to be co
499
500 int32_t init_error = plugin_entry_points_.initialize_module(
501 local_pp_module_, &ppapi::proxy::PluginDispatcher::GetBrowserInterface);
502 if (init_error != PP_OK) {
503 LOG(WARNING) << "InitModule failed with error " << init_error;
504 ReportLoadResult(path, INIT_FAILED);
505 return;
506 }
493 } 507 }
494 508
495 // Initialization succeeded, so keep the plugin DLL loaded. 509 // Initialization succeeded, so keep the plugin DLL loaded.
496 library_.Reset(library.Release()); 510 library_.Reset(library.Release());
497 511
498 ReportLoadResult(path, LOAD_SUCCESS); 512 ReportLoadResult(path, LOAD_SUCCESS);
499 } 513 }
500 514
501 void PpapiThread::OnCreateChannel(base::ProcessId renderer_pid, 515 void PpapiThread::OnCreateChannel(base::ProcessId renderer_pid,
502 int renderer_child_id, 516 int renderer_child_id,
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after
637 GetHistogramName(is_broker_, "LoadTime", path), 651 GetHistogramName(is_broker_, "LoadTime", path),
638 base::TimeDelta::FromMilliseconds(1), 652 base::TimeDelta::FromMilliseconds(1),
639 base::TimeDelta::FromSeconds(10), 653 base::TimeDelta::FromSeconds(10),
640 50, 654 50,
641 base::HistogramBase::kUmaTargetedHistogramFlag); 655 base::HistogramBase::kUmaTargetedHistogramFlag);
642 656
643 histogram->AddTime(load_time); 657 histogram->AddTime(load_time);
644 } 658 }
645 659
646 } // namespace content 660 } // namespace content
OLDNEW
« no previous file with comments | « content/common/media/cdm_host_files.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698