pepper_flash_drm_host.cc revision cedac228d2dd51db4b79ea1e72c7f249408ee061
1ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com// Copyright (c) 2012 The Chromium Authors. All rights reserved. 2ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com// Use of this source code is governed by a BSD-style license that can be 3ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com// found in the LICENSE file. 4ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com 5ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com#include "chrome/browser/renderer_host/pepper/pepper_flash_drm_host.h" 69d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org 79d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org#if defined(OS_WIN) 89d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org#include <Windows.h> 9fd03d4a829efe2d77a712fd991927c55f59a2ffecommit-bot@chromium.org#endif 10d537341e16524d1e22ac5e6c8b9c8f274ba1833crobertphillips 1169cc6ad20ed03f35f9d3c8119a2c32187669a22bbsalomon@google.com#include "base/bind.h" 129d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org#include "base/compiler_specific.h" 1381712883419f76e25d2ffec38a9438284a45a48dbsalomon@google.com#include "base/logging.h" 14b9086a026844e4cfd08b219e49ce3f12294cba98bsalomon@google.com#include "base/memory/ref_counted.h" 15fd03d4a829efe2d77a712fd991927c55f59a2ffecommit-bot@chromium.org#include "content/public/browser/browser_ppapi_host.h" 16181e9bd9484ece4132e0cc5cfcff602134e5489dbsalomon@google.com#include "content/public/browser/browser_thread.h" 171878651990d7c9da72cf43481432232bbef3550dcommit-bot@chromium.org#include "content/public/browser/child_process_security_policy.h" 181878651990d7c9da72cf43481432232bbef3550dcommit-bot@chromium.org#include "content/public/browser/render_frame_host.h" 1981712883419f76e25d2ffec38a9438284a45a48dbsalomon@google.com#include "content/public/common/pepper_plugin_info.h" 20181e9bd9484ece4132e0cc5cfcff602134e5489dbsalomon@google.com#include "ppapi/c/pp_errors.h" 21181e9bd9484ece4132e0cc5cfcff602134e5489dbsalomon@google.com#include "ppapi/host/dispatch_host_message.h" 22383963280ddd13030331765fe88d2aefa3e32130bsalomon@google.com#include "ppapi/host/host_message_context.h" 23383963280ddd13030331765fe88d2aefa3e32130bsalomon@google.com#include "ppapi/host/ppapi_host.h" 24383963280ddd13030331765fe88d2aefa3e32130bsalomon@google.com#include "ppapi/proxy/ppapi_messages.h" 25b9086a026844e4cfd08b219e49ce3f12294cba98bsalomon@google.com 26383963280ddd13030331765fe88d2aefa3e32130bsalomon@google.com#if defined(USE_AURA) 27383963280ddd13030331765fe88d2aefa3e32130bsalomon@google.com#include "ui/aura/window.h" 28383963280ddd13030331765fe88d2aefa3e32130bsalomon@google.com#include "ui/aura/window_tree_host.h" 29383963280ddd13030331765fe88d2aefa3e32130bsalomon@google.com#endif 30383963280ddd13030331765fe88d2aefa3e32130bsalomon@google.com 31181e9bd9484ece4132e0cc5cfcff602134e5489dbsalomon@google.com#if defined(OS_MACOSX) 3281712883419f76e25d2ffec38a9438284a45a48dbsalomon@google.com#include "chrome/browser/renderer_host/pepper/monitor_finder_mac.h" 33181e9bd9484ece4132e0cc5cfcff602134e5489dbsalomon@google.com#endif 34181e9bd9484ece4132e0cc5cfcff602134e5489dbsalomon@google.com 35181e9bd9484ece4132e0cc5cfcff602134e5489dbsalomon@google.comusing content::BrowserPpapiHost; 36b5b3168a645802f66233234a06dd5a3764f18018bsalomon@google.com 374b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.orgnamespace chrome { 389d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org 39972f9cd7a063d0544f8c919fd12b9a3adbd12b24commit-bot@chromium.orgnamespace { 4081712883419f76e25d2ffec38a9438284a45a48dbsalomon@google.comconst char kVoucherFilename[] = "plugin.vch"; 41c10a88825d119054a9f4e7b7af7a3f887e30ab6btomhudson@google.com} 42afec7ba75962517b17293799d3fc70d39fa7dbf2tomhudson@google.com 43c10a88825d119054a9f4e7b7af7a3f887e30ab6btomhudson@google.com#if defined(OS_WIN) 44f6de475e5cbd143f348ff7738919e397b7fe7f57tfarina@chromium.org// Helper class to get the UI thread which monitor is showing the 45c10a88825d119054a9f4e7b7af7a3f887e30ab6btomhudson@google.com// window associated with the instance's render view. Since we get 4681712883419f76e25d2ffec38a9438284a45a48dbsalomon@google.com// called by the IO thread and we cannot block, the first answer is 47c10a88825d119054a9f4e7b7af7a3f887e30ab6btomhudson@google.com// of GetMonitor() may be NULL, but eventually it will contain the 489d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org// right monitor. 499d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.orgclass MonitorFinder : public base::RefCountedThreadSafe<MonitorFinder> { 509d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org public: 519d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org MonitorFinder(int process_id, int render_frame_id) 529d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org : process_id_(process_id), 539d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org render_frame_id_(render_frame_id), 54e1ca705cac4b946993f6cbf798e2a0ba27e739f3reed@google.com monitor_(NULL), 5561f3bde1ba114e7b39b53411f4aa31ed0875d159bsalomon@google.com request_sent_(0) {} 5661f3bde1ba114e7b39b53411f4aa31ed0875d159bsalomon@google.com 5761f3bde1ba114e7b39b53411f4aa31ed0875d159bsalomon@google.com int64_t GetMonitor() { 5861f3bde1ba114e7b39b53411f4aa31ed0875d159bsalomon@google.com // We use |request_sent_| as an atomic boolean so that we 5961f3bde1ba114e7b39b53411f4aa31ed0875d159bsalomon@google.com // never have more than one task posted at a given time. We 6061f3bde1ba114e7b39b53411f4aa31ed0875d159bsalomon@google.com // do this because we don't know how often our client is going 6161f3bde1ba114e7b39b53411f4aa31ed0875d159bsalomon@google.com // to call and we can't cache the |monitor_| value. 62972f9cd7a063d0544f8c919fd12b9a3adbd12b24commit-bot@chromium.org if (InterlockedCompareExchange(&request_sent_, 1, 0) == 0) { 639d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org content::BrowserThread::PostTask( 649d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org content::BrowserThread::UI, 659d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org FROM_HERE, 66972f9cd7a063d0544f8c919fd12b9a3adbd12b24commit-bot@chromium.org base::Bind(&MonitorFinder::FetchMonitorFromWidget, this)); 67972f9cd7a063d0544f8c919fd12b9a3adbd12b24commit-bot@chromium.org } 68972f9cd7a063d0544f8c919fd12b9a3adbd12b24commit-bot@chromium.org return reinterpret_cast<int64_t>(monitor_); 6981712883419f76e25d2ffec38a9438284a45a48dbsalomon@google.com } 70972f9cd7a063d0544f8c919fd12b9a3adbd12b24commit-bot@chromium.org 71c10a88825d119054a9f4e7b7af7a3f887e30ab6btomhudson@google.com private: 729d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org friend class base::RefCountedThreadSafe<MonitorFinder>; 739d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org ~MonitorFinder() {} 749d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org 759d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org void FetchMonitorFromWidget() { 769d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org InterlockedExchange(&request_sent_, 0); 779d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org content::RenderFrameHost* rfh = 789d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org content::RenderFrameHost::FromID(process_id_, render_frame_id_); 79972f9cd7a063d0544f8c919fd12b9a3adbd12b24commit-bot@chromium.org if (!rfh) 8081712883419f76e25d2ffec38a9438284a45a48dbsalomon@google.com return; 8181712883419f76e25d2ffec38a9438284a45a48dbsalomon@google.com gfx::NativeView native_view = rfh->GetNativeView(); 829d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org#if defined(USE_AURA) 83972f9cd7a063d0544f8c919fd12b9a3adbd12b24commit-bot@chromium.org aura::WindowTreeHost* host = native_view->GetHost(); 849d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org if (!host) 859d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org return; 869d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org HWND window = host->GetAcceleratedWidget(); 879d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org#else 889d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org HWND window = native_view; 899d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org#endif 909d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org HMONITOR monitor = ::MonitorFromWindow(window, MONITOR_DEFAULTTONULL); 91972f9cd7a063d0544f8c919fd12b9a3adbd12b24commit-bot@chromium.org InterlockedExchangePointer(reinterpret_cast<void* volatile*>(&monitor_), 9281712883419f76e25d2ffec38a9438284a45a48dbsalomon@google.com monitor); 93c10a88825d119054a9f4e7b7af7a3f887e30ab6btomhudson@google.com } 94afec7ba75962517b17293799d3fc70d39fa7dbf2tomhudson@google.com 95c10a88825d119054a9f4e7b7af7a3f887e30ab6btomhudson@google.com const int process_id_; 96f6de475e5cbd143f348ff7738919e397b7fe7f57tfarina@chromium.org const int render_frame_id_; 97c10a88825d119054a9f4e7b7af7a3f887e30ab6btomhudson@google.com volatile HMONITOR monitor_; 98972f9cd7a063d0544f8c919fd12b9a3adbd12b24commit-bot@chromium.org volatile long request_sent_; 99c10a88825d119054a9f4e7b7af7a3f887e30ab6btomhudson@google.com}; 100c10a88825d119054a9f4e7b7af7a3f887e30ab6btomhudson@google.com#elif !defined(OS_MACOSX) 1012047f00e4698f83499ab91911999a65c21a951c9epoger@google.com// TODO(cpu): Support Linux someday. 102c10a88825d119054a9f4e7b7af7a3f887e30ab6btomhudson@google.comclass MonitorFinder : public base::RefCountedThreadSafe<MonitorFinder> { 1039d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org public: 1049d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org MonitorFinder(int, int) {} 105e1ca705cac4b946993f6cbf798e2a0ba27e739f3reed@google.com int64_t GetMonitor() { return 0; } 10661f3bde1ba114e7b39b53411f4aa31ed0875d159bsalomon@google.com 10761f3bde1ba114e7b39b53411f4aa31ed0875d159bsalomon@google.com private: 10861f3bde1ba114e7b39b53411f4aa31ed0875d159bsalomon@google.com friend class base::RefCountedThreadSafe<MonitorFinder>; 10961f3bde1ba114e7b39b53411f4aa31ed0875d159bsalomon@google.com ~MonitorFinder() {} 11061f3bde1ba114e7b39b53411f4aa31ed0875d159bsalomon@google.com}; 11161f3bde1ba114e7b39b53411f4aa31ed0875d159bsalomon@google.com#endif 11261f3bde1ba114e7b39b53411f4aa31ed0875d159bsalomon@google.com 113972f9cd7a063d0544f8c919fd12b9a3adbd12b24commit-bot@chromium.orgPepperFlashDRMHost::PepperFlashDRMHost(BrowserPpapiHost* host, 1149d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org PP_Instance instance, 1159d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org PP_Resource resource) 1169d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org : ppapi::host::ResourceHost(host->GetPpapiHost(), instance, resource), 117972f9cd7a063d0544f8c919fd12b9a3adbd12b24commit-bot@chromium.org weak_factory_(this) { 118972f9cd7a063d0544f8c919fd12b9a3adbd12b24commit-bot@chromium.org // Grant permissions to read the flash voucher file. 119972f9cd7a063d0544f8c919fd12b9a3adbd12b24commit-bot@chromium.org int render_process_id; 120972f9cd7a063d0544f8c919fd12b9a3adbd12b24commit-bot@chromium.org int render_frame_id; 12181712883419f76e25d2ffec38a9438284a45a48dbsalomon@google.com bool success = host->GetRenderFrameIDsForInstance( 122972f9cd7a063d0544f8c919fd12b9a3adbd12b24commit-bot@chromium.org instance, &render_process_id, &render_frame_id); 123c10a88825d119054a9f4e7b7af7a3f887e30ab6btomhudson@google.com base::FilePath plugin_dir = host->GetPluginPath().DirName(); 1249d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org DCHECK(!plugin_dir.empty() && success); 1259d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org base::FilePath voucher_file = plugin_dir.AppendASCII(kVoucherFilename); 1269d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org content::ChildProcessSecurityPolicy::GetInstance()->GrantReadFile( 1279d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org render_process_id, voucher_file); 1289d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org 1299d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org fetcher_ = new DeviceIDFetcher(render_process_id); 1309d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org monitor_finder_ = new MonitorFinder(render_process_id, render_frame_id); 131972f9cd7a063d0544f8c919fd12b9a3adbd12b24commit-bot@chromium.org monitor_finder_->GetMonitor(); 13281712883419f76e25d2ffec38a9438284a45a48dbsalomon@google.com} 13381712883419f76e25d2ffec38a9438284a45a48dbsalomon@google.com 13481712883419f76e25d2ffec38a9438284a45a48dbsalomon@google.comPepperFlashDRMHost::~PepperFlashDRMHost() {} 1359d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org 136972f9cd7a063d0544f8c919fd12b9a3adbd12b24commit-bot@chromium.orgint32_t PepperFlashDRMHost::OnResourceMessageReceived( 13781712883419f76e25d2ffec38a9438284a45a48dbsalomon@google.com const IPC::Message& msg, 13881712883419f76e25d2ffec38a9438284a45a48dbsalomon@google.com ppapi::host::HostMessageContext* context) { 1399d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org PPAPI_BEGIN_MESSAGE_MAP(PepperFlashDRMHost, msg) 140972f9cd7a063d0544f8c919fd12b9a3adbd12b24commit-bot@chromium.org PPAPI_DISPATCH_HOST_RESOURCE_CALL_0(PpapiHostMsg_FlashDRM_GetDeviceID, 1419d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org OnHostMsgGetDeviceID) 1429d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org PPAPI_DISPATCH_HOST_RESOURCE_CALL_0(PpapiHostMsg_FlashDRM_GetHmonitor, 1439d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org OnHostMsgGetHmonitor) 1449d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org PPAPI_DISPATCH_HOST_RESOURCE_CALL_0(PpapiHostMsg_FlashDRM_MonitorIsExternal, 1459d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org OnHostMsgMonitorIsExternal) 1469d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org PPAPI_END_MESSAGE_MAP() 1478d033a1b125886c62906d975b5cc28a382064526bsalomon@google.com return PP_ERROR_FAILED; 14881712883419f76e25d2ffec38a9438284a45a48dbsalomon@google.com} 149c10a88825d119054a9f4e7b7af7a3f887e30ab6btomhudson@google.com 150afec7ba75962517b17293799d3fc70d39fa7dbf2tomhudson@google.comint32_t PepperFlashDRMHost::OnHostMsgGetDeviceID( 151c10a88825d119054a9f4e7b7af7a3f887e30ab6btomhudson@google.com ppapi::host::HostMessageContext* context) { 152f6de475e5cbd143f348ff7738919e397b7fe7f57tfarina@chromium.org if (!fetcher_->Start(base::Bind(&PepperFlashDRMHost::GotDeviceID, 153c10a88825d119054a9f4e7b7af7a3f887e30ab6btomhudson@google.com weak_factory_.GetWeakPtr(), 1549d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org context->MakeReplyMessageContext()))) { 1559d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org return PP_ERROR_INPROGRESS; 1569d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org } 1579d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org return PP_OK_COMPLETIONPENDING; 1589d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org} 159129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org 16094b284d719ee5ccd3e2efbd1d7084ec554583bacbsalomon@google.comint32_t PepperFlashDRMHost::OnHostMsgGetHmonitor( 1619d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org ppapi::host::HostMessageContext* context) { 162972f9cd7a063d0544f8c919fd12b9a3adbd12b24commit-bot@chromium.org int64_t monitor_id = monitor_finder_->GetMonitor(); 16394b284d719ee5ccd3e2efbd1d7084ec554583bacbsalomon@google.com if (monitor_id) { 1649d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org context->reply_msg = PpapiPluginMsg_FlashDRM_GetHmonitorReply(monitor_id); 16594b284d719ee5ccd3e2efbd1d7084ec554583bacbsalomon@google.com return PP_OK; 16694b284d719ee5ccd3e2efbd1d7084ec554583bacbsalomon@google.com } 1679d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org return PP_ERROR_FAILED; 1689d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org} 16994b284d719ee5ccd3e2efbd1d7084ec554583bacbsalomon@google.com 1709d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.orgint32_t PepperFlashDRMHost::OnHostMsgMonitorIsExternal( 1719d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org ppapi::host::HostMessageContext* context) { 17294b284d719ee5ccd3e2efbd1d7084ec554583bacbsalomon@google.com int64_t monitor_id = monitor_finder_->GetMonitor(); 1739d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org if (!monitor_id) 1749d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org return PP_ERROR_FAILED; 17594b284d719ee5ccd3e2efbd1d7084ec554583bacbsalomon@google.com 1769d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org PP_Bool is_external = PP_FALSE; 1779d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org#if defined(OS_MACOSX) 1789d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org if (!MonitorFinder::IsMonitorBuiltIn(monitor_id)) 1799d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org is_external = PP_TRUE; 1809d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org#endif 1819d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org context->reply_msg = 1829d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org PpapiPluginMsg_FlashDRM_MonitorIsExternalReply(is_external); 1839d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org return PP_OK; 1849d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org} 1859d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org 1869d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.orgvoid PepperFlashDRMHost::GotDeviceID( 1879d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org ppapi::host::ReplyMessageContext reply_context, 18869cc6ad20ed03f35f9d3c8119a2c32187669a22bbsalomon@google.com const std::string& id, 189972f9cd7a063d0544f8c919fd12b9a3adbd12b24commit-bot@chromium.org int32_t result) { 1901971317bb43580330a9e7e9a1c09c5025fe84aacbsalomon@google.com if (id.empty() && result == PP_OK) { 191dc3c78076ea279d4f6d502b3b42471e9b2bba48ebsalomon@google.com NOTREACHED(); 192dc3c78076ea279d4f6d502b3b42471e9b2bba48ebsalomon@google.com result = PP_ERROR_FAILED; 193dc3c78076ea279d4f6d502b3b42471e9b2bba48ebsalomon@google.com } 194dc3c78076ea279d4f6d502b3b42471e9b2bba48ebsalomon@google.com reply_context.params.set_result(result); 195f543fd9e8c162b65fd04d1d9439b60911f8eb4c0commit-bot@chromium.org host()->SendReply(reply_context, 196f543fd9e8c162b65fd04d1d9439b60911f8eb4c0commit-bot@chromium.org PpapiPluginMsg_FlashDRM_GetDeviceIDReply(id)); 197f543fd9e8c162b65fd04d1d9439b60911f8eb4c0commit-bot@chromium.org} 198dc3c78076ea279d4f6d502b3b42471e9b2bba48ebsalomon@google.com 199f543fd9e8c162b65fd04d1d9439b60911f8eb4c0commit-bot@chromium.org} // namespace chrome 200f543fd9e8c162b65fd04d1d9439b60911f8eb4c0commit-bot@chromium.org