1cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 2cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// found in the LICENSE file. 4cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 5cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#ifndef MOJO_SYSTEM_PLATFORM_HANDLE_DISPATCHER_H_ 6cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#define MOJO_SYSTEM_PLATFORM_HANDLE_DISPATCHER_H_ 7cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 8cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "base/macros.h" 9cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "mojo/embedder/scoped_platform_handle.h" 10cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "mojo/system/simple_dispatcher.h" 11cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "mojo/system/system_impl_export.h" 12cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 13cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)namespace mojo { 14cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)namespace system { 15cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 16cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// A dispatcher that simply wraps/transports a |PlatformHandle| (only for use by 17cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// the embedder). 18cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class MOJO_SYSTEM_IMPL_EXPORT PlatformHandleDispatcher 19cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) : public SimpleDispatcher { 20cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) public: 21cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) explicit PlatformHandleDispatcher( 22cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) embedder::ScopedPlatformHandle platform_handle); 23cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 24cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) embedder::ScopedPlatformHandle PassPlatformHandle(); 25cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 26cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // |Dispatcher| public methods: 27cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual Type GetType() const OVERRIDE; 28cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 29cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // The "opposite" of |SerializeAndClose()|. (Typically this is called by 30cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // |Dispatcher::Deserialize()|.) 31cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) static scoped_refptr<PlatformHandleDispatcher> Deserialize( 32cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) Channel* channel, 33cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const void* source, 34cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) size_t size, 35cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) embedder::PlatformHandleVector* platform_handles); 36cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 37cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) private: 38cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual ~PlatformHandleDispatcher(); 39cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 40cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // |Dispatcher| protected methods: 41cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual void CloseImplNoLock() OVERRIDE; 42cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual scoped_refptr<Dispatcher> 43cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) CreateEquivalentDispatcherAndCloseImplNoLock() OVERRIDE; 44cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual void StartSerializeImplNoLock(Channel* channel, 45cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) size_t* max_size, 46cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) size_t* max_platform_handles) OVERRIDE; 47cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual bool EndSerializeAndCloseImplNoLock( 48cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) Channel* channel, 49cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) void* destination, 50cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) size_t* actual_size, 51cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) embedder::PlatformHandleVector* platform_handles) OVERRIDE; 52cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 53cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) embedder::ScopedPlatformHandle platform_handle_; 54cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 55cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(PlatformHandleDispatcher); 56cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}; 57cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 58cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} // namespace system 59cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} // namespace mojo 60cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 61cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#endif // MOJO_SYSTEM_PLATFORM_HANDLE_DISPATCHER_H_ 62