In libraries relying on binder it is useful to be able to obtain an existing copy of BinderWrapper or create one if it doesn't exist. This allows to abstract the actual RPC (binder) from clients who have no other dependencies on this RPC. BUG: 23782171 Change-Id: Ie775d3d8ab83d75e38abc7e1385eb39a363555ef
88 lines
3 KiB
C++
88 lines
3 KiB
C++
/*
|
|
* 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 <string>
|
|
|
|
#include <base/callback.h>
|
|
#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 base::Closure& callback) = 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_
|