15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/renderer_host/pepper/pepper_flash_device_id_host.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/bind.h" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/compiler_specific.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/logging.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/browser_ppapi_host.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/c/pp_errors.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/host/dispatch_host_message.h" 13c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "ppapi/host/host_message_context.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/host/ppapi_host.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/proxy/ppapi_messages.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::BrowserPpapiHost; 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace chrome { 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PepperFlashDeviceIDHost::PepperFlashDeviceIDHost(BrowserPpapiHost* host, 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_Instance instance, 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_Resource resource) 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : ppapi::host::ResourceHost(host->GetPpapiHost(), instance, resource), 25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) weak_factory_(this){ 2690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) int render_process_id, unused; 2790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) host->GetRenderViewIDsForInstance(instance, &render_process_id, &unused); 2890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) fetcher_ = new DeviceIDFetcher(render_process_id); 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PepperFlashDeviceIDHost::~PepperFlashDeviceIDHost() { 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int32_t PepperFlashDeviceIDHost::OnResourceMessageReceived( 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const IPC::Message& msg, 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ppapi::host::HostMessageContext* context) { 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_BEGIN_MESSAGE_MAP(PepperFlashDeviceIDHost, msg) 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PPAPI_DISPATCH_HOST_RESOURCE_CALL_0(PpapiHostMsg_FlashDeviceID_GetDeviceID, 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OnHostMsgGetDeviceID) 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_END_MESSAGE_MAP() 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return PP_ERROR_FAILED; 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int32_t PepperFlashDeviceIDHost::OnHostMsgGetDeviceID( 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ppapi::host::HostMessageContext* context) { 4690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) if (!fetcher_->Start(base::Bind(&PepperFlashDeviceIDHost::GotDeviceID, 4790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) weak_factory_.GetWeakPtr(), 4890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) context->MakeReplyMessageContext()))) { 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return PP_ERROR_INPROGRESS; 5090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) } 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return PP_OK_COMPLETIONPENDING; 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)void PepperFlashDeviceIDHost::GotDeviceID( 5590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ppapi::host::ReplyMessageContext reply_context, 5690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) const std::string& id) { 5790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) reply_context.params.set_result( 58c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) id.empty() ? PP_ERROR_FAILED : PP_OK); 5990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) host()->SendReply(reply_context, 60c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) PpapiPluginMsg_FlashDeviceID_GetDeviceIDReply(id)); 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace chrome 64