| Index: chrome/browser/chromeos/file_system_provider/file_system_plugin/plugineventrouter.h
|
| diff --git a/chrome/browser/chromeos/file_system_provider/file_system_plugin/plugineventrouter.h b/chrome/browser/chromeos/file_system_provider/file_system_plugin/plugineventrouter.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..9e5cc63beeea92f1887cbc600754b6fbdfabb737
|
| --- /dev/null
|
| +++ b/chrome/browser/chromeos/file_system_provider/file_system_plugin/plugineventrouter.h
|
| @@ -0,0 +1,132 @@
|
| +// Copyright 2015 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#ifndef CHROME_BROWSER_CHROMEOS_FILE_SYSTEM_PROVIDER_FILE_SYSTEM_PLUGIN_PLUGINEVENTROUTER_H_
|
| +#define CHROME_BROWSER_CHROMEOS_FILE_SYSTEM_PROVIDER_FILE_SYSTEM_PLUGIN_PLUGINEVENTROUTER_H_
|
| +
|
| +#include <map>
|
| +#include <set>
|
| +#include <string>
|
| +
|
| +#include "base/memory/linked_ptr.h"
|
| +#include "base/memory/scoped_ptr.h"
|
| +#include "base/memory/singleton.h"
|
| +#include "base/memory/weak_ptr.h"
|
| +#include "base/values.h"
|
| +
|
| +#include "ppapi/host/resource_host.h"
|
| +
|
| +template <typename T>
|
| +struct DefaultSingletonTraits;
|
| +
|
| +namespace extensions {
|
| +struct Event;
|
| +} // namespace extensions
|
| +
|
| +namespace chromeos {
|
| +
|
| +class EventToPluginList;
|
| +class PluginListeningInstances;
|
| +
|
| +class PluginEventRouter {
|
| + public:
|
| + class PluginEventRouterClient {
|
| + virtual void OnDispatchEvent(std::string event_name,
|
| + scoped_ptr<base::ListValue> event_args) {}
|
| + friend class PluginListeningInstances;
|
| + };
|
| +
|
| + static PluginEventRouter* GetInstance();
|
| + // Register and array of events for a plugin
|
| + void AddEventsListener(const std::vector<std::string>& event_names,
|
| + PluginEventRouterClient* plugin_ref,
|
| + const std::string& plugin_id);
|
| + // Register a single event for the plugin
|
| + void AddEventListener(const std::string& event_name,
|
| + PluginEventRouterClient* plugin_ref,
|
| + const std::string& plugin_id);
|
| + // Remove an array of events at a time
|
| + void RemoveEventsListeners(const std::vector<std::string>& event_names,
|
| + PluginEventRouterClient* plugin_ref,
|
| + const std::string& plugin_id);
|
| + // Remove a single event
|
| + void RemoveEventListener(const std::string& event_name,
|
| + PluginEventRouterClient* plugin_process,
|
| + const std::string& plugin_id);
|
| +
|
| + // Does the router have any listener on this event
|
| + bool HasEventListener(const std::string& event_name);
|
| +
|
| + // Does a specific plugin have the event registered
|
| + bool PluginHasEventListener(const std::string& event_name,
|
| + const std::string& plugin_id);
|
| + void DispatchEventToPlugin(const std::string& plugin_id,
|
| + scoped_ptr<extensions::Event> event);
|
| +
|
| + private:
|
| + PluginEventRouter();
|
| + ~PluginEventRouter();
|
| + friend struct DefaultSingletonTraits<PluginEventRouter>;
|
| +
|
| + // [event_name] = map[plugin1, plugin2]
|
| + typedef std::map<std::string, EventToPluginList> EventList;
|
| + typedef EventList::iterator EventListIterator;
|
| + EventList listOfListenedEvents_;
|
| +
|
| + base::WeakPtrFactory<PluginEventRouter> weak_ptr_factory_;
|
| + DISALLOW_COPY_AND_ASSIGN(PluginEventRouter);
|
| +};
|
| +
|
| +class PluginListeningInstances {
|
| + public:
|
| + PluginListeningInstances(
|
| + const std::string& plugin_id,
|
| + PluginEventRouter::PluginEventRouterClient* instance_);
|
| + ~PluginListeningInstances();
|
| +
|
| + void AddPluginInstance(PluginEventRouter::PluginEventRouterClient* instance);
|
| + void RemovePluginInstance(
|
| + PluginEventRouter::PluginEventRouterClient* instance);
|
| + bool Empty();
|
| + void DispatchEvent(std::string event_name,
|
| + scoped_ptr<base::ListValue> event_args);
|
| +
|
| + protected:
|
| + std::string plugin_id_;
|
| + typedef std::set<PluginEventRouter::PluginEventRouterClient*> SetOfInstances;
|
| + typedef SetOfInstances::iterator SetOfInstancesIterator;
|
| + SetOfInstances plugin_instances_;
|
| +};
|
| +
|
| +class EventToPluginList {
|
| + public:
|
| + EventToPluginList(const std::string& event_name,
|
| + const std::string& plugin_id,
|
| + PluginEventRouter::PluginEventRouterClient* instance);
|
| + ~EventToPluginList();
|
| +
|
| + void AddPluginInstance(const std::string& plugin_id,
|
| + PluginEventRouter::PluginEventRouterClient* instance);
|
| + void RemovePluginInstance(
|
| + const std::string& plugin_id,
|
| + PluginEventRouter::PluginEventRouterClient* instance);
|
| + bool Empty();
|
| +
|
| + bool HasPlugin(const std::string& plugin_id);
|
| +
|
| + void DispatchEventToPlugin(std::string plugin_id,
|
| + std::string event_name,
|
| + scoped_ptr<base::ListValue> event_args);
|
| +
|
| + protected:
|
| + std::string event_name_;
|
| + // [plugin_id] = set[ instance_1, instance_2 ]
|
| + typedef std::map<std::string, PluginListeningInstances> ListOfPlugins;
|
| + typedef ListOfPlugins::iterator PluginListIterator;
|
| + ListOfPlugins plugin_list_;
|
| +};
|
| +
|
| +} // namespace chromeos
|
| +
|
| +#endif // CHROME_BROWSER_CHROMEOS_FILE_SYSTEM_PROVIDER_FILE_SYSTEM_PLUGIN_PLUGINEVENTROUTER_H_
|
|
|