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
3// found in the LICENSE file.
4
5#include "content/browser/pepper_flash_settings_helper_impl.h"
6
7#include "base/files/file_path.h"
8#include "content/browser/plugin_service_impl.h"
9#include "content/public/browser/browser_thread.h"
10#include "ipc/ipc_channel_handle.h"
11
12namespace content {
13
14// static
15scoped_refptr<PepperFlashSettingsHelper> PepperFlashSettingsHelper::Create() {
16  return new PepperFlashSettingsHelperImpl();
17}
18
19PepperFlashSettingsHelperImpl::PepperFlashSettingsHelperImpl() {
20}
21
22PepperFlashSettingsHelperImpl::~PepperFlashSettingsHelperImpl() {
23}
24
25void PepperFlashSettingsHelperImpl::OpenChannelToBroker(
26    const base::FilePath& path,
27    const OpenChannelCallback& callback) {
28  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
29
30  if (callback.is_null())
31    return;
32  if (!callback_.is_null())
33    callback.Run(false, IPC::ChannelHandle());
34
35  // Balanced in OnPpapiChannelOpened(). We need to keep this object around
36  // until then.
37  AddRef();
38
39  callback_ = callback;
40  PluginServiceImpl* plugin_service = PluginServiceImpl::GetInstance();
41  plugin_service->OpenChannelToPpapiBroker(0, path, this);
42}
43
44void PepperFlashSettingsHelperImpl::GetPpapiChannelInfo(
45    base::ProcessHandle* renderer_handle,
46    int* renderer_id) {
47  *renderer_handle = base::kNullProcessHandle;
48  *renderer_id = 0;
49}
50
51void PepperFlashSettingsHelperImpl::OnPpapiChannelOpened(
52    const IPC::ChannelHandle& channel_handle,
53    base::ProcessId /* plugin_pid */,
54    int /* plugin_child_id */) {
55  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
56  DCHECK(!callback_.is_null());
57
58  if (!channel_handle.name.empty())
59    callback_.Run(true, channel_handle);
60  else
61    callback_.Run(false, IPC::ChannelHandle());
62
63  callback_.Reset();
64  // Balance the AddRef() call in Initialize().
65  Release();
66}
67
68bool PepperFlashSettingsHelperImpl::OffTheRecord() {
69  return false;
70}
71
72}  // namespace content
73