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/renderer/extensions/tabs_custom_bindings.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string> 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/bind.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/renderer/render_view.h" 11a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "extensions/common/extension_messages.h" 120529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "extensions/renderer/script_context.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "v8/include/v8.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace extensions { 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 170529e5d033099cbfc42635f6f6183833b09dff6eBen MurdochTabsCustomBindings::TabsCustomBindings(ScriptContext* context) 180529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch : ObjectBackedNativeHandler(context) { 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RouteFunction("OpenChannelToTab", 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::Bind(&TabsCustomBindings::OpenChannelToTab, 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::Unretained(this))); 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 247d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)void TabsCustomBindings::OpenChannelToTab( 257d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const v8::FunctionCallbackInfo<v8::Value>& args) { 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Get the current RenderView so that we can send a routed IPC message from 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the correct source. 280529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch content::RenderView* renderview = context()->GetRenderView(); 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!renderview) 307d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return; 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (args.Length() >= 3 && args[0]->IsInt32() && args[1]->IsString() && 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) args[2]->IsString()) { 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int tab_id = args[0]->Int32Value(); 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string extension_id = *v8::String::Utf8Value(args[1]->ToString()); 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string channel_name = *v8::String::Utf8Value(args[2]->ToString()); 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int port_id = -1; 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) renderview->Send(new ExtensionHostMsg_OpenChannelToTab( 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) renderview->GetRoutingID(), tab_id, extension_id, channel_name, 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &port_id)); 417d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) args.GetReturnValue().Set(static_cast<int32_t>(port_id)); 427d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return; 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 467d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} // namespace extensions 47