/* * Copyright (C) 2015 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef SYSTEM_CORE_INCLUDE_BINDERWRAPPER_BINDER_WRAPPER_H_ #define SYSTEM_CORE_INCLUDE_BINDERWRAPPER_BINDER_WRAPPER_H_ #include #include #include #include namespace android { class BBinder; class IBinder; // Wraps libbinder to make it testable. // NOTE: Static methods of this class are not thread-safe. class BinderWrapper { public: virtual ~BinderWrapper() {} // Creates and initializes the singleton (using a wrapper that communicates // with the real binder system). static void Create(); // Initializes |wrapper| as the singleton, taking ownership of it. Tests that // want to inject their own wrappers should call this instead of Create(). static void InitForTesting(BinderWrapper* wrapper); // Destroys the singleton. Must be called before calling Create() or // InitForTesting() a second time. static void Destroy(); // Returns the singleton instance previously created by Create() or set by // InitForTesting(). static BinderWrapper* Get(); // Returns the singleton instance if it was previously created by Create() or // set by InitForTesting(), or creates a new one by calling Create(). static BinderWrapper* GetOrCreateInstance(); // Gets the binder for communicating with the service identified by // |service_name|, returning null immediately if it doesn't exist. virtual sp GetService(const std::string& service_name) = 0; // Registers |binder| as |service_name| with the service manager. virtual bool RegisterService(const std::string& service_name, const sp& binder) = 0; // Creates a local binder object. virtual sp CreateLocalBinder() = 0; // Registers |callback| to be invoked when |binder| dies. If another callback // is currently registered for |binder|, it will be replaced. virtual bool RegisterForDeathNotifications( const sp& binder, const ::base::Closure& callback) = 0; // Unregisters the callback, if any, for |binder|. virtual bool UnregisterForDeathNotifications(const sp& binder) = 0; // When called while in a transaction, returns the caller's UID or PID. virtual uid_t GetCallingUid() = 0; virtual pid_t GetCallingPid() = 0; private: static BinderWrapper* instance_; }; } // namespace android #endif // SYSTEM_CORE_INCLUDE_BINDERWRAPPER_BINDER_WRAPPER_H_