Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / content / browser / devtools / embedded_worker_devtools_manager.h
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #ifndef CONTENT_BROWSER_DEVTOOLS_EMBEDDED_WORKER_DEVTOOLS_MANAGER_H_
6 #define CONTENT_BROWSER_DEVTOOLS_EMBEDDED_WORKER_DEVTOOLS_MANAGER_H_
7
8 #include <map>
9
10 #include "base/basictypes.h"
11 #include "base/gtest_prod_util.h"
12 #include "base/memory/scoped_vector.h"
13 #include "base/memory/singleton.h"
14 #include "base/strings/string16.h"
15 #include "content/browser/shared_worker/shared_worker_instance.h"
16 #include "content/common/content_export.h"
17
18 namespace content {
19
20 class DevToolsAgentHost;
21 class EmbeddedWorkerDevToolsAgentHost;
22 class ServiceWorkerContextCore;
23
24 // EmbeddedWorkerDevToolsManager is used instead of WorkerDevToolsManager when
25 // "enable-embedded-shared-worker" flag is set.
26 // This class lives on UI thread.
27 class CONTENT_EXPORT EmbeddedWorkerDevToolsManager {
28  public:
29   typedef std::pair<int, int> WorkerId;
30
31   class ServiceWorkerIdentifier {
32    public:
33     ServiceWorkerIdentifier(
34         const ServiceWorkerContextCore* const service_worker_context,
35         int64 service_worker_version_id);
36     explicit ServiceWorkerIdentifier(const ServiceWorkerIdentifier& other);
37     ~ServiceWorkerIdentifier() {}
38
39     bool Matches(const ServiceWorkerIdentifier& other) const;
40
41    private:
42     const ServiceWorkerContextCore* const service_worker_context_;
43     const int64 service_worker_version_id_;
44   };
45
46   // Returns the EmbeddedWorkerDevToolsManager singleton.
47   static EmbeddedWorkerDevToolsManager* GetInstance();
48
49   DevToolsAgentHost* GetDevToolsAgentHostForWorker(int worker_process_id,
50                                                    int worker_route_id);
51
52   // Returns true when the worker must be paused on start because a DevTool
53   // window for the same former SharedWorkerInstance is still opened.
54   bool SharedWorkerCreated(int worker_process_id,
55                            int worker_route_id,
56                            const SharedWorkerInstance& instance);
57   // Returns true when the worker must be paused on start because a DevTool
58   // window for the same former ServiceWorkerIdentifier is still opened or
59   // debug-on-start is enabled in chrome://serviceworker-internals.
60   bool ServiceWorkerCreated(int worker_process_id,
61                             int worker_route_id,
62                             const ServiceWorkerIdentifier& service_worker_id);
63   void WorkerContextStarted(int worker_process_id, int worker_route_id);
64   void WorkerDestroyed(int worker_process_id, int worker_route_id);
65
66   void set_debug_service_worker_on_start(bool debug_on_start) {
67     debug_service_worker_on_start_ = debug_on_start;
68   }
69   bool debug_service_worker_on_start() const {
70     return debug_service_worker_on_start_;
71   }
72
73  private:
74   friend struct DefaultSingletonTraits<EmbeddedWorkerDevToolsManager>;
75   friend class EmbeddedWorkerDevToolsAgentHost;
76   friend class EmbeddedWorkerDevToolsManagerTest;
77   FRIEND_TEST_ALL_PREFIXES(EmbeddedWorkerDevToolsManagerTest, BasicTest);
78   FRIEND_TEST_ALL_PREFIXES(EmbeddedWorkerDevToolsManagerTest, AttachTest);
79
80   typedef std::map<WorkerId, EmbeddedWorkerDevToolsAgentHost*> AgentHostMap;
81
82   EmbeddedWorkerDevToolsManager();
83   virtual ~EmbeddedWorkerDevToolsManager();
84
85   void RemoveInspectedWorkerData(WorkerId id);
86
87   AgentHostMap::iterator FindExistingSharedWorkerAgentHost(
88       const SharedWorkerInstance& instance);
89   AgentHostMap::iterator FindExistingServiceWorkerAgentHost(
90       const ServiceWorkerIdentifier& service_worker_id);
91
92   void WorkerRestarted(const WorkerId& id, const AgentHostMap::iterator& it);
93
94   // Resets to its initial state as if newly created.
95   void ResetForTesting();
96
97   AgentHostMap workers_;
98
99   bool debug_service_worker_on_start_;
100
101   DISALLOW_COPY_AND_ASSIGN(EmbeddedWorkerDevToolsManager);
102 };
103
104 }  // namespace content
105
106 #endif  // CONTENT_BROWSER_DEVTOOLS_EMBEDDED_WORKER_DEVTOOLS_MANAGER_H_