181c8c04f6eabcb9a4d490308e3b22ea7b1f240efrouslan@chromium.org// Copyright (c) 2012 The Chromium Authors. All rights reserved.
281c8c04f6eabcb9a4d490308e3b22ea7b1f240efrouslan@chromium.org// Use of this source code is governed by a BSD-style license that can be
381c8c04f6eabcb9a4d490308e3b22ea7b1f240efrouslan@chromium.org// found in the LICENSE file.
4331dbc1b0c5a464d9ac9ce8348f5de6a928a936arouslan@chromium.org
5331dbc1b0c5a464d9ac9ce8348f5de6a928a936arouslan@chromium.org#include "content/browser/pepper_flash_settings_helper_impl.h"
6331dbc1b0c5a464d9ac9ce8348f5de6a928a936arouslan@chromium.org
781c8c04f6eabcb9a4d490308e3b22ea7b1f240efrouslan@chromium.org#include "base/files/file_path.h"
8331dbc1b0c5a464d9ac9ce8348f5de6a928a936arouslan@chromium.org#include "content/browser/plugin_service_impl.h"
9331dbc1b0c5a464d9ac9ce8348f5de6a928a936arouslan@chromium.org#include "content/public/browser/browser_thread.h"
10331dbc1b0c5a464d9ac9ce8348f5de6a928a936arouslan@chromium.org#include "ipc/ipc_channel_handle.h"
11331dbc1b0c5a464d9ac9ce8348f5de6a928a936arouslan@chromium.org
12331dbc1b0c5a464d9ac9ce8348f5de6a928a936arouslan@chromium.orgnamespace content {
1381c8c04f6eabcb9a4d490308e3b22ea7b1f240efrouslan@chromium.org
1481c8c04f6eabcb9a4d490308e3b22ea7b1f240efrouslan@chromium.org// static
15331dbc1b0c5a464d9ac9ce8348f5de6a928a936arouslan@chromium.orgscoped_refptr<PepperFlashSettingsHelper> PepperFlashSettingsHelper::Create() {
16331dbc1b0c5a464d9ac9ce8348f5de6a928a936arouslan@chromium.org  return new PepperFlashSettingsHelperImpl();
17331dbc1b0c5a464d9ac9ce8348f5de6a928a936arouslan@chromium.org}
1881c8c04f6eabcb9a4d490308e3b22ea7b1f240efrouslan@chromium.org
19331dbc1b0c5a464d9ac9ce8348f5de6a928a936arouslan@chromium.orgPepperFlashSettingsHelperImpl::PepperFlashSettingsHelperImpl() {
20331dbc1b0c5a464d9ac9ce8348f5de6a928a936arouslan@chromium.org}
21331dbc1b0c5a464d9ac9ce8348f5de6a928a936arouslan@chromium.org
22331dbc1b0c5a464d9ac9ce8348f5de6a928a936arouslan@chromium.orgPepperFlashSettingsHelperImpl::~PepperFlashSettingsHelperImpl() {
23331dbc1b0c5a464d9ac9ce8348f5de6a928a936arouslan@chromium.org}
24331dbc1b0c5a464d9ac9ce8348f5de6a928a936arouslan@chromium.org
2581c8c04f6eabcb9a4d490308e3b22ea7b1f240efrouslan@chromium.orgvoid PepperFlashSettingsHelperImpl::OpenChannelToBroker(
2681c8c04f6eabcb9a4d490308e3b22ea7b1f240efrouslan@chromium.org    const base::FilePath& path,
2781c8c04f6eabcb9a4d490308e3b22ea7b1f240efrouslan@chromium.org    const OpenChannelCallback& callback) {
2881c8c04f6eabcb9a4d490308e3b22ea7b1f240efrouslan@chromium.org  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
2981c8c04f6eabcb9a4d490308e3b22ea7b1f240efrouslan@chromium.org
3081c8c04f6eabcb9a4d490308e3b22ea7b1f240efrouslan@chromium.org  if (callback.is_null())
3181c8c04f6eabcb9a4d490308e3b22ea7b1f240efrouslan@chromium.org    return;
3281c8c04f6eabcb9a4d490308e3b22ea7b1f240efrouslan@chromium.org  if (!callback_.is_null())
3381c8c04f6eabcb9a4d490308e3b22ea7b1f240efrouslan@chromium.org    callback.Run(false, IPC::ChannelHandle());
3481c8c04f6eabcb9a4d490308e3b22ea7b1f240efrouslan@chromium.org
3581c8c04f6eabcb9a4d490308e3b22ea7b1f240efrouslan@chromium.org  // Balanced in OnPpapiChannelOpened(). We need to keep this object around
3681c8c04f6eabcb9a4d490308e3b22ea7b1f240efrouslan@chromium.org  // until then.
3781c8c04f6eabcb9a4d490308e3b22ea7b1f240efrouslan@chromium.org  AddRef();
3881c8c04f6eabcb9a4d490308e3b22ea7b1f240efrouslan@chromium.org
3981c8c04f6eabcb9a4d490308e3b22ea7b1f240efrouslan@chromium.org  callback_ = callback;
4081c8c04f6eabcb9a4d490308e3b22ea7b1f240efrouslan@chromium.org  PluginServiceImpl* plugin_service = PluginServiceImpl::GetInstance();
4181c8c04f6eabcb9a4d490308e3b22ea7b1f240efrouslan@chromium.org  plugin_service->OpenChannelToPpapiBroker(0, path, this);
4281c8c04f6eabcb9a4d490308e3b22ea7b1f240efrouslan@chromium.org}
4381c8c04f6eabcb9a4d490308e3b22ea7b1f240efrouslan@chromium.org
4481c8c04f6eabcb9a4d490308e3b22ea7b1f240efrouslan@chromium.orgvoid PepperFlashSettingsHelperImpl::GetPpapiChannelInfo(
4581c8c04f6eabcb9a4d490308e3b22ea7b1f240efrouslan@chromium.org    base::ProcessHandle* renderer_handle,
4681c8c04f6eabcb9a4d490308e3b22ea7b1f240efrouslan@chromium.org    int* renderer_id) {
4781c8c04f6eabcb9a4d490308e3b22ea7b1f240efrouslan@chromium.org  *renderer_handle = base::kNullProcessHandle;
4881c8c04f6eabcb9a4d490308e3b22ea7b1f240efrouslan@chromium.org  *renderer_id = 0;
4981c8c04f6eabcb9a4d490308e3b22ea7b1f240efrouslan@chromium.org}
5081c8c04f6eabcb9a4d490308e3b22ea7b1f240efrouslan@chromium.org
5181c8c04f6eabcb9a4d490308e3b22ea7b1f240efrouslan@chromium.orgvoid PepperFlashSettingsHelperImpl::OnPpapiChannelOpened(
5281c8c04f6eabcb9a4d490308e3b22ea7b1f240efrouslan@chromium.org    const IPC::ChannelHandle& channel_handle,
5381c8c04f6eabcb9a4d490308e3b22ea7b1f240efrouslan@chromium.org    base::ProcessId /* plugin_pid */,
5481c8c04f6eabcb9a4d490308e3b22ea7b1f240efrouslan@chromium.org    int /* plugin_child_id */) {
5581c8c04f6eabcb9a4d490308e3b22ea7b1f240efrouslan@chromium.org  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
5681c8c04f6eabcb9a4d490308e3b22ea7b1f240efrouslan@chromium.org  DCHECK(!callback_.is_null());
5781c8c04f6eabcb9a4d490308e3b22ea7b1f240efrouslan@chromium.org
5881c8c04f6eabcb9a4d490308e3b22ea7b1f240efrouslan@chromium.org  if (!channel_handle.name.empty())
5981c8c04f6eabcb9a4d490308e3b22ea7b1f240efrouslan@chromium.org    callback_.Run(true, channel_handle);
6081c8c04f6eabcb9a4d490308e3b22ea7b1f240efrouslan@chromium.org  else
6181c8c04f6eabcb9a4d490308e3b22ea7b1f240efrouslan@chromium.org    callback_.Run(false, IPC::ChannelHandle());
6281c8c04f6eabcb9a4d490308e3b22ea7b1f240efrouslan@chromium.org
6381c8c04f6eabcb9a4d490308e3b22ea7b1f240efrouslan@chromium.org  callback_.Reset();
6481c8c04f6eabcb9a4d490308e3b22ea7b1f240efrouslan@chromium.org  // Balance the AddRef() call in Initialize().
6581c8c04f6eabcb9a4d490308e3b22ea7b1f240efrouslan@chromium.org  Release();
6681c8c04f6eabcb9a4d490308e3b22ea7b1f240efrouslan@chromium.org}
6781c8c04f6eabcb9a4d490308e3b22ea7b1f240efrouslan@chromium.org
6881c8c04f6eabcb9a4d490308e3b22ea7b1f240efrouslan@chromium.orgbool PepperFlashSettingsHelperImpl::OffTheRecord() {
6981c8c04f6eabcb9a4d490308e3b22ea7b1f240efrouslan@chromium.org  return false;
7081c8c04f6eabcb9a4d490308e3b22ea7b1f240efrouslan@chromium.org}
7181c8c04f6eabcb9a4d490308e3b22ea7b1f240efrouslan@chromium.org
7281c8c04f6eabcb9a4d490308e3b22ea7b1f240efrouslan@chromium.org}  // namespace content
7381c8c04f6eabcb9a4d490308e3b22ea7b1f240efrouslan@chromium.org