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)
52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/browser/media/media_internals_handler.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/bind.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/bind_helpers.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/values.h"
10424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#include "content/browser/media/media_internals_proxy.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/browser_thread.h"
12a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "content/public/browser/render_frame_host.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_contents.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_ui.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace content {
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)MediaInternalsMessageHandler::MediaInternalsMessageHandler()
19f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    : proxy_(new MediaInternalsProxy()),
20f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      page_load_complete_(false) {}
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)MediaInternalsMessageHandler::~MediaInternalsMessageHandler() {
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  proxy_->Detach();
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MediaInternalsMessageHandler::RegisterMessages() {
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  proxy_->Attach(this);
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  web_ui()->RegisterMessageCallback("getEverything",
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      base::Bind(&MediaInternalsMessageHandler::OnGetEverything,
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 base::Unretained(this)));
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
35eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochvoid MediaInternalsMessageHandler::OnGetEverything(
36eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    const base::ListValue* list) {
37f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  page_load_complete_ = true;
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  proxy_->GetEverything();
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
41a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)void MediaInternalsMessageHandler::OnUpdate(const base::string16& update) {
42f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // Don't try to execute JavaScript in a RenderView that no longer exists nor
43f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // if the chrome://media-internals page hasn't finished loading.
44a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  RenderFrameHost* host = web_ui()->GetWebContents()->GetMainFrame();
45f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  if (host && page_load_complete_)
46a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    host->ExecuteJavaScript(update);
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // namespace content
50