|  | /* | 
|  | * 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 <sys/types.h> | 
|  |  | 
|  | #include <functional> | 
|  | #include <string> | 
|  |  | 
|  | #include <utils/StrongPointer.h> | 
|  |  | 
|  | 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<IBinder> 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<IBinder>& binder) = 0; | 
|  |  | 
|  | // Creates a local binder object. | 
|  | virtual sp<BBinder> 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<IBinder>& binder, | 
|  | const std::function<void()>&) = 0; | 
|  |  | 
|  | // Unregisters the callback, if any, for |binder|. | 
|  | virtual bool UnregisterForDeathNotifications(const sp<IBinder>& 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_ |