Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(24)

Unified Diff: components/arc/arc_bridge_service.h

Issue 1413153007: arc-app-launcher: Minimal support for ARC app launcher. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix WeakPtr issue. Change PostTask on PostTaskAndReplyWithResult Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: components/arc/arc_bridge_service.h
diff --git a/components/arc/arc_bridge_service.h b/components/arc/arc_bridge_service.h
index e3417bc985756c0db52044b339df84c9da3d350b..494a4402844a86ca02184abd8bd5e443babd1a64 100644
--- a/components/arc/arc_bridge_service.h
+++ b/components/arc/arc_bridge_service.h
@@ -17,7 +17,7 @@ namespace arc {
// The Chrome-side service that handles ARC instances and ARC bridge creation.
// This service handles the lifetime of ARC instances and sets up the
// communication channel (the ARC bridge) used to send and receive messages.
-class ArcBridgeService : public IPC::Listener {
+class ArcBridgeService {
public:
// The possible states of the bridge. In the normal flow, the state changes
// in the following sequence:
@@ -67,33 +67,28 @@ class ArcBridgeService : public IPC::Listener {
// Called whenever ARC's availability has changed for this system.
virtual void OnAvailableChanged(bool available) {}
+ // Called whenever ARC sends information about available apps.
+ virtual void OnAppsRefreshed(const std::vector<std::string>& name,
+ const std::vector<std::string>& packages,
+ const std::vector<std::string>& activities) {}
+
+ // Called whenever ARC sends app icon data for specific scale factor.
+ virtual void OnAppIcon(const std::string& package,
+ const std::string& activity,
+ int scale_factor,
+ const std::vector<uint8_t>& icon_png_data) {}
+
protected:
virtual ~Observer() {}
};
- ArcBridgeService(
- const scoped_refptr<base::SingleThreadTaskRunner>& ipc_task_runner,
- const scoped_refptr<base::SequencedTaskRunner>& file_task_runner);
- ~ArcBridgeService() override;
+ ArcBridgeService();
+ virtual ~ArcBridgeService();
// Gets the global instance of the ARC Bridge Service. This can only be
// called on the thread that this class was created on.
static ArcBridgeService* Get();
- // DetectAvailability() should be called once D-Bus is available. It will
- // call CheckArcAvailability() on the session_manager. This can only be
- // called on the thread that this class was created on.
- void DetectAvailability();
-
- // HandleStartup() should be called upon profile startup. This will only
- // launch an instance if the instance service is available and it is enabled.
- // This can only be called on the thread that this class was created on.
- void HandleStartup();
-
- // Shutdown() should be called when the browser is shutting down. This can
- // only be called on the thread that this class was created on.
- void Shutdown();
-
// Adds or removes observers. This can only be called on the thread that this
// class was created on.
void AddObserver(Observer* observer);
@@ -105,15 +100,89 @@ class ArcBridgeService : public IPC::Listener {
// Gets if ARC is available in this system.
bool available() const { return available_; }
+ // HandleStartup() should be called upon profile startup. This will only
+ // launch an instance if the instance service is available and it is enabled.
+ // This can only be called on the thread that this class was created on.
+ virtual void HandleStartup() = 0;
+
+ // Shutdown() should be called when the browser is shutting down. This can
+ // only be called on the thread that this class was created on.
+ virtual void Shutdown() = 0;
+
+
// Requests registration of an input device on the ARC instance.
// TODO(denniskempin): Make this interface more typesafe.
// |name| should be the displayable name of the emulated device (e.g. "Chrome
// OS Keyboard"), |device_type| the name of the device type (e.g. "keyboard")
// and |fd| a file descriptor that emulates the kernel events of the device.
// This can only be called on the thread that this class was created on.
+ virtual bool RegisterInputDevice(const std::string& name,
+ const std::string& device_type,
+ base::ScopedFD fd) = 0;
+
+ // Requests to refresh an app list.
+ virtual bool RefreshApps() = 0;
+
+ // Requests to launch an app.
+ virtual bool LaunchApp(const std::string& package,
+ const std::string& activity) = 0;
+
+ // Request to load icon of specific scale_factor.
+ virtual bool RequestIcon(const std::string& package,
+ const std::string& activity,
+ int scale_factor) = 0;
+
+ protected:
+ // Changes the current state and notifies all observers.
+ void SetState(State state);
+
+ // Changes the current availability and notifies all observers.
+ void SetAvailable(bool availability);
+
+ scoped_refptr<base::SequencedTaskRunner> origin_task_runner_;
+
+ base::ObserverList<Observer> observer_list_;
+
+ // If the ARC instance service is available.
+ bool available_;
+
+ // The current state of the bridge.
+ ArcBridgeService::State state_;
+
+ DISALLOW_COPY_AND_ASSIGN(ArcBridgeService);
+};
+
+class ArcBridgeServiceImpl : public ArcBridgeService, public IPC::Listener {
xiyuan 2015/11/18 03:42:16 Move this into its own file, arc_bridge_service_im
khmel1 2015/11/18 06:10:05 Done.
+ public:
+
+ ArcBridgeServiceImpl(
+ const scoped_refptr<base::SingleThreadTaskRunner>& ipc_task_runner,
+ const scoped_refptr<base::SequencedTaskRunner>& file_task_runner);
+ ~ArcBridgeServiceImpl() override;
+
+ // DetectAvailability() should be called once D-Bus is available. It will
+ // call CheckArcAvailability() on the session_manager. This can only be
+ // called on the thread that this class was created on.
+ void DetectAvailability();
+
+ void HandleStartup() override;
+
+ void Shutdown() override;
+
bool RegisterInputDevice(const std::string& name,
const std::string& device_type,
- base::ScopedFD fd);
+ base::ScopedFD fd) override;
+ // Requests to refresh an app list.
+ bool RefreshApps() override;
+
+ // Requests to launch an app.
+ bool LaunchApp(const std::string& package,
+ const std::string& activity) override;
+
+ // Request to load icon of specific scale_factor.
+ bool RequestIcon(const std::string& package,
+ const std::string& activity,
+ int scale_factor) override;
private:
friend class ArcBridgeTest;
@@ -148,8 +217,16 @@ class ArcBridgeService : public IPC::Listener {
// interaction.
void OnInstanceReady();
- // Changes the current state and notifies all observers.
- void SetState(State state);
+ // Called whenever ARC sends information about available apps.
+ void OnAppsRefreshed(const std::vector<std::string>& name,
+ const std::vector<std::string>& packages,
+ const std::vector<std::string>& activities);
+
+ // Called whenever ARC sends app icon data for specific scale factor.
+ void OnAppIcon(const std::string& package,
+ const std::string& activity,
+ int scale_factor,
+ const std::vector<uint8_t>& icon_png_data);
// IPC::Listener:
bool OnMessageReceived(const IPC::Message& message) override;
@@ -159,27 +236,18 @@ class ArcBridgeService : public IPC::Listener {
void OnInstanceStarted(bool success);
void OnInstanceStopped(bool success);
- scoped_refptr<base::SequencedTaskRunner> origin_task_runner_;
scoped_refptr<base::SingleThreadTaskRunner> ipc_task_runner_;
scoped_refptr<base::SequencedTaskRunner> file_task_runner_;
scoped_ptr<IPC::ChannelProxy> ipc_channel_;
- base::ObserverList<Observer> observer_list_;
-
// If the user's session has started.
bool session_started_;
- // If the ARC instance service is available.
- bool available_;
-
- // The current state of the bridge.
- ArcBridgeService::State state_;
-
// WeakPtrFactory to use callbacks.
- base::WeakPtrFactory<ArcBridgeService> weak_factory_;
+ base::WeakPtrFactory<ArcBridgeServiceImpl> weak_factory_;
- DISALLOW_COPY_AND_ASSIGN(ArcBridgeService);
+ DISALLOW_COPY_AND_ASSIGN(ArcBridgeServiceImpl);
};
} // namespace arc

Powered by Google App Engine
This is Rietveld 408576698