| Index: extensions/renderer/script_context_set.h
|
| diff --git a/extensions/renderer/script_context_set.h b/extensions/renderer/script_context_set.h
|
| index aa7b253d57742bbff456be1c06a024a87ce2dcbf..ac3cb17840934007023ec4dc66017e54a5e73033 100644
|
| --- a/extensions/renderer/script_context_set.h
|
| +++ b/extensions/renderer/script_context_set.h
|
| @@ -8,8 +8,12 @@
|
| #include <set>
|
| #include <string>
|
|
|
| -#include "base/basictypes.h"
|
| -#include "base/bind.h"
|
| +#include "base/macros.h"
|
| +#include "base/memory/weak_ptr.h"
|
| +#include "extensions/common/extension.h"
|
| +#include "extensions/common/extension_set.h"
|
| +#include "extensions/common/features/feature.h"
|
| +#include "url/gurl.h"
|
| #include "v8/include/v8.h"
|
|
|
| class GURL;
|
| @@ -18,39 +22,50 @@ namespace base {
|
| class ListValue;
|
| }
|
|
|
| -namespace content {
|
| -class RenderView;
|
| +namespace blink {
|
| +class WebLocalFrame;
|
| +class WebSecurityOrigin;
|
| }
|
|
|
| -namespace v8 {
|
| -class Context;
|
| +namespace content {
|
| +class RenderView;
|
| }
|
|
|
| namespace extensions {
|
| class ScriptContext;
|
|
|
| -// A container of ExtensionBindingsContext. Since calling JavaScript within a
|
| -// context can cause any number of contexts to be created or destroyed, this
|
| -// has additional smarts to help with the set changing underneath callers.
|
| +// A container of ScriptContexts, responsible for both creating and managing
|
| +// them.
|
| +//
|
| +// Since calling JavaScript within a context can cause any number of contexts
|
| +// to be created or destroyed, this has additional smarts to help with the set
|
| +// changing underneath callers.
|
| class ScriptContextSet {
|
| public:
|
| - ScriptContextSet();
|
| + ScriptContextSet(
|
| + ExtensionSet* extensions,
|
| + // Set of the IDs of extensions that are active in this process.
|
| + // Must outlive this. TODO(kalman): Combine this and |extensions|.
|
| + ExtensionIdSet* active_extension_ids);
|
| +
|
| ~ScriptContextSet();
|
|
|
| - int size() const;
|
| + // Returns the number of contexts being tracked by this set.
|
| + // This may also include invalid contexts. TODO(kalman): Useful?
|
| + size_t size() const { return contexts_.size(); }
|
|
|
| - // Takes ownership of |context|.
|
| - void Add(ScriptContext* context);
|
| + // Creates and starts managing a new ScriptContext. Ownership is held.
|
| + // Returns a weak reference to the new ScriptContext.
|
| + ScriptContext* Register(blink::WebLocalFrame* frame,
|
| + const v8::Handle<v8::Context>& v8_context,
|
| + int extension_group,
|
| + int world_id);
|
|
|
| // If the specified context is contained in this set, remove it, then delete
|
| // it asynchronously. After this call returns the context object will still
|
| // be valid, but its frame() pointer will be cleared.
|
| void Remove(ScriptContext* context);
|
|
|
| - // Returns a copy to protect against changes.
|
| - typedef std::set<ScriptContext*> ContextSet;
|
| - ContextSet GetAll() const;
|
| -
|
| // Gets the ScriptContext corresponding to v8::Context::GetCurrent(), or
|
| // NULL if no such context exists.
|
| ScriptContext* GetCurrent() const;
|
| @@ -61,7 +76,7 @@ class ScriptContextSet {
|
|
|
| // Gets the ScriptContext corresponding to the specified
|
| // v8::Context or NULL if no such context exists.
|
| - ScriptContext* GetByV8Context(v8::Handle<v8::Context> context) const;
|
| + ScriptContext* GetByV8Context(const v8::Handle<v8::Context>& context) const;
|
|
|
| // Synchronously runs |callback| with each ScriptContext that belongs to
|
| // |extension_id| in |render_view|.
|
| @@ -88,10 +103,39 @@ class ScriptContextSet {
|
| // Returns the set of ScriptContexts that were removed as a result. These
|
| // are safe to interact with until the end of the current event loop, since
|
| // they're deleted asynchronously.
|
| - ContextSet OnExtensionUnloaded(const std::string& extension_id);
|
| + std::set<ScriptContext*> OnExtensionUnloaded(const std::string& extension_id);
|
|
|
| private:
|
| - ContextSet contexts_;
|
| + // Finds the extension for the JavaScript context associated with the
|
| + // specified |frame| and isolated world. If |world_id| is zero, finds the
|
| + // extension ID associated with the main world's JavaScript context. If the
|
| + // JavaScript context isn't from an extension, returns empty string.
|
| + const Extension* GetExtensionFromFrameAndWorld(
|
| + const blink::WebLocalFrame* frame,
|
| + int world_id,
|
| + bool use_effective_url);
|
| +
|
| + // Returns the Feature::Context type of context for a JavaScript context.
|
| + Feature::Context ClassifyJavaScriptContext(
|
| + const Extension* extension,
|
| + int extension_group,
|
| + const GURL& url,
|
| + const blink::WebSecurityOrigin& origin);
|
| +
|
| + // Calls Remove on |context| then appends |context| to |out|.
|
| + // This is a helper designed to be used by OnExtensionUnloaded with ForEach.
|
| + void DispatchOnUnloadEventAndRemove(std::set<ScriptContext*>* out,
|
| + ScriptContext* context);
|
| +
|
| + // Weak reference to all installed Extensions.
|
| + ExtensionSet* extensions_;
|
| +
|
| + // Weak reference to all installed Extensions that are also active in this
|
| + // process.
|
| + ExtensionIdSet* active_extension_ids_;
|
| +
|
| + // The set of all ScriptContexts we own.
|
| + std::set<ScriptContext*> contexts_;
|
|
|
| DISALLOW_COPY_AND_ASSIGN(ScriptContextSet);
|
| };
|
|
|