| Index: chrome/browser/extensions/api/tab_capture/tab_capture_event_router.cc
|
| diff --git a/chrome/browser/extensions/api/tab_capture/tab_capture_event_router.cc b/chrome/browser/extensions/api/tab_capture/tab_capture_event_router.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..e3e41957dea68d1edac27ae0c6a37cc0231c786a
|
| --- /dev/null
|
| +++ b/chrome/browser/extensions/api/tab_capture/tab_capture_event_router.cc
|
| @@ -0,0 +1,83 @@
|
| +// Copyright (c) 2012 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include "chrome/browser/extensions/api/tab_capture/tab_capture_event_router.h"
|
| +
|
| +#include "base/string_number_conversions.h"
|
| +#include "base/string_piece.h"
|
| +#include "chrome/browser/profiles/profile.h"
|
| +#include "chrome/browser/profiles/profile_dependency_manager.h"
|
| +#include "chrome/browser/media/media_internals.h"
|
| +#include "chrome/browser/extensions/event_names.h"
|
| +#include "chrome/browser/extensions/event_router.h"
|
| +#include "chrome/common/extensions/api/experimental_tab_capture.h"
|
| +
|
| +namespace events = extensions::event_names;
|
| +namespace tab_capture = extensions::api::experimental_tab_capture;
|
| +
|
| +namespace extensions {
|
| +
|
| +TabCaptureEventRouter::TabCaptureEventRouter(Profile* profile)
|
| + : profile_(profile) {
|
| + MediaInternals::GetInstance()->AddObserver(this);
|
| +}
|
| +
|
| +TabCaptureEventRouter::~TabCaptureEventRouter() {
|
| + MediaInternals::GetInstance()->RemoveObserver(this);
|
| +}
|
| +
|
| +void TabCaptureEventRouter::OnRequestUpdate(
|
| + const content::MediaStreamDevice& device,
|
| + const content::MediaStreamRequest::RequestState new_state) {
|
| + EventRouter* router = profile_ ? profile_->GetExtensionEventRouter() : NULL;
|
| + if (!router)
|
| + return;
|
| +
|
| + if (device.type != content::MEDIA_TAB_VIDEO_CAPTURE &&
|
| + device.type != content::MEDIA_TAB_AUDIO_CAPTURE)
|
| + return;
|
| +
|
| + // Parse out the tab_id.
|
| + const size_t sep_pos = device.device_id.find(':');
|
| + if (sep_pos == std::string::npos)
|
| + return;
|
| +
|
| + const base::StringPiece component1(device.device_id.data(), sep_pos);
|
| + int tabId = -1;
|
| + if (!base::StringToInt(component1, &tabId))
|
| + return;
|
| +
|
| + tab_capture::TabCaptureState state =
|
| + tab_capture::EXPERIMENTAL_TAB_CAPTURE_TAB_CAPTURE_STATE_NONE;
|
| + switch (new_state) {
|
| + case content::MediaStreamRequest::STATE_REQUESTED:
|
| + state = tab_capture::EXPERIMENTAL_TAB_CAPTURE_TAB_CAPTURE_STATE_REQUESTED;
|
| + break;
|
| + case content::MediaStreamRequest::STATE_PENDING_APPROVAL:
|
| + state = tab_capture::EXPERIMENTAL_TAB_CAPTURE_TAB_CAPTURE_STATE_PENDING;
|
| + break;
|
| + case content::MediaStreamRequest::STATE_OPENING:
|
| + state = tab_capture::EXPERIMENTAL_TAB_CAPTURE_TAB_CAPTURE_STATE_ACTIVE;
|
| + break;
|
| + case content::MediaStreamRequest::STATE_DONE:
|
| + state = tab_capture::EXPERIMENTAL_TAB_CAPTURE_TAB_CAPTURE_STATE_STOPPED;
|
| + break;
|
| + case content::MediaStreamRequest::STATE_ERROR:
|
| + state = tab_capture::EXPERIMENTAL_TAB_CAPTURE_TAB_CAPTURE_STATE_ERROR;
|
| + break;
|
| + default:
|
| + // TODO(justinlin): Handle muted event.
|
| + break;
|
| + }
|
| +
|
| + scoped_ptr<base::ListValue> args(new ListValue());
|
| + args->AppendInteger(tabId);
|
| + args->Append(tab_capture::CreateEnumValue(state).get());
|
| + router->DispatchEventToRenderers(events::kOnTabCaptured,
|
| + args.Pass(),
|
| + profile_,
|
| + GURL());
|
| +}
|
| +
|
| +} // namespace extensions
|
|
|