15f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 25f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// found in the LICENSE file. 45f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 55f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "remoting/host/fake_host_extension.h" 65f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 75f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include <string> 85f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 95f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "base/logging.h" 105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "remoting/codec/video_encoder.h" 115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "remoting/host/host_extension_session.h" 125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "remoting/proto/control.pb.h" 136e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "third_party/webrtc/modules/desktop_capture/desktop_capturer.h" 145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)namespace remoting { 165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)class FakeExtension::Session : public HostExtensionSession { 185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) public: 195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Session(FakeExtension* extension, const std::string& message_type); 205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) virtual ~Session() {} 215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // HostExtensionSession interface. 231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual void OnCreateVideoCapturer( 241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_ptr<webrtc::DesktopCapturer>* encoder) OVERRIDE; 251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual void OnCreateVideoEncoder(scoped_ptr<VideoEncoder>* encoder) OVERRIDE; 265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) virtual bool ModifiesVideoPipeline() const OVERRIDE; 275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) virtual bool OnExtensionMessage( 285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ClientSessionControl* client_session_control, 295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) protocol::ClientStub* client_stub, 305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const protocol::ExtensionMessage& message) OVERRIDE; 315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) private: 335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) FakeExtension* extension_; 345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) std::string message_type_; 355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(Session); 375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}; 385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)FakeExtension::Session::Session( 405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) FakeExtension* extension, const std::string& message_type) 415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) : extension_(extension), 425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) message_type_(message_type) { 435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid FakeExtension::Session::OnCreateVideoCapturer( 461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_ptr<webrtc::DesktopCapturer>* capturer) { 475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) extension_->has_wrapped_video_capturer_ = true; 485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (extension_->steal_video_capturer_) { 491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci capturer->reset(); 505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid FakeExtension::Session::OnCreateVideoEncoder( 541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_ptr<VideoEncoder>* encoder) { 555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) extension_->has_wrapped_video_encoder_ = true; 565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)bool FakeExtension::Session::ModifiesVideoPipeline() const { 595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return extension_->steal_video_capturer_; 605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)bool FakeExtension::Session::OnExtensionMessage( 635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ClientSessionControl* client_session_control, 645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) protocol::ClientStub* client_stub, 655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const protocol::ExtensionMessage& message) { 665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (message.type() == message_type_) { 675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) extension_->has_handled_message_ = true; 685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return true; 695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return false; 715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)FakeExtension::FakeExtension(const std::string& message_type, 745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const std::string& capability) 755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) : message_type_(message_type), 765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) capability_(capability), 775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) steal_video_capturer_(false), 785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) has_handled_message_(false), 795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) has_wrapped_video_encoder_(false), 805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) has_wrapped_video_capturer_(false), 815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) was_instantiated_(false) { 825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)FakeExtension::~FakeExtension() { 855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)std::string FakeExtension::capability() const { 885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return capability_; 895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)scoped_ptr<HostExtensionSession> FakeExtension::CreateExtensionSession( 925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ClientSessionControl* client_session_control, 935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) protocol::ClientStub* client_stub) { 945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) DCHECK(!was_instantiated()); 955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) was_instantiated_ = true; 965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) scoped_ptr<HostExtensionSession> session(new Session(this, message_type_)); 975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return session.Pass(); 985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} // namespace remoting 101