summaryrefslogtreecommitdiffstats
path: root/dom/base/nsIObjectLoadingContent.idl
blob: 82fcfa8559f6b6b413fd4e7cb973b97cd0607f4d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */

#include "nsISupports.idl"

interface nsIChannel;
interface nsIRequest;
interface nsIFrame;
interface nsIObjectFrame;
interface nsIPluginTag;
interface nsIURI;

webidl BrowsingContext;

%{C++
class nsNPAPIPluginInstance;
%}
[ptr] native nsNPAPIPluginInstancePtr(nsNPAPIPluginInstance);

/**
 * This interface represents a content node that loads objects.
 *
 * Please make sure to update the MozObjectLoadingContent WebIDL
 * mixin to mirror this interface when changing it.
 */

[scriptable, builtinclass, uuid(2eb3195e-3eea-4083-bb1d-d2d70fa35ccb)]
interface nsIObjectLoadingContent : nsISupports
{
  /**
   * See notes in nsObjectLoadingContent.h
   */
  const unsigned long TYPE_LOADING     = 0;
  const unsigned long TYPE_IMAGE       = 1;
  const unsigned long TYPE_PLUGIN      = 2;
  const unsigned long TYPE_FAKE_PLUGIN = 3;
  const unsigned long TYPE_DOCUMENT    = 4;
  const unsigned long TYPE_NULL        = 5;

  const unsigned long PLUGIN_ACTIVE               = 0xFF;

  // The content type is not supported (e.g. plugin not installed)
  const unsigned long PLUGIN_UNSUPPORTED          = 0;
  // Showing alternate content
  const unsigned long PLUGIN_ALTERNATE            = 1;
  // The plugin exists, but is disabled
  const unsigned long PLUGIN_DISABLED             = 2;
  // The plugin is blocklisted and disabled
  const unsigned long PLUGIN_BLOCKLISTED          = 3;
  // The plugin is considered outdated, but not disabled
  const unsigned long PLUGIN_OUTDATED             = 4;
  // The plugin has crashed
  const unsigned long PLUGIN_CRASHED              = 5;
  /// ** All values >= PLUGIN_CLICK_TO_PLAY are plugin placeholder types that
  ///    would be replaced by a real plugin if activated (playPlugin())
  /// ** Furthermore, values >= PLUGIN_CLICK_TO_PLAY and
  ///    <= PLUGIN_CLICK_TO_PLAY_QUIET are click-to-play types.
  // The plugin is disabled until the user clicks on it
  const unsigned long PLUGIN_CLICK_TO_PLAY        = 8;
  // The plugin is vulnerable (update available)
  const unsigned long PLUGIN_VULNERABLE_UPDATABLE = 9;
  // The plugin is vulnerable (no update available)
  const unsigned long PLUGIN_VULNERABLE_NO_UPDATE = 10;
  // The plugin is click-to-play, but the user won't see overlays
  const unsigned long PLUGIN_CLICK_TO_PLAY_QUIET  = 11;
  // Plugins are no longer supported.  The plugin should not load and should
  // be represented by a transparent element.
  const unsigned long PLUGIN_BLOCK_ALL            = 12;

  // Plugins-specific permission indicating that we want to prompt the user
  // to decide whether they want to allow a plugin, but to do so in a less
  // intrusive way than PROMPT_ACTION would entail. At the time of writing,
  // this means hiding all in-content plugin overlays, but still showing the
  // plugin badge in the URL bar.
  const unsigned long PLUGIN_PERMISSION_PROMPT_ACTION_QUIET = 8;

  /**
   * The actual mime type (the one we got back from the network
   * request) for the element.
   */
  readonly attribute ACString actualType;

  /**
   * Gets the type of the content that's currently loaded. See
   * the constants above for the list of possible values.
   */
  readonly attribute unsigned long displayedType;

  /**
   * Gets the content type that corresponds to the give MIME type.  See the
   * constants above for the list of possible values.  If nothing else fits,
   * TYPE_NULL will be returned.
   */
  unsigned long getContentTypeForMIMEType(in AUTF8String aMimeType);

  /**
   * Returns the plugin instance if it has already been instantiated. This
   * will never instantiate the plugin and so is safe to call even when
   * content script must not execute.
   */
  [notxpcom,nostdcall] readonly attribute nsNPAPIPluginInstancePtr pluginInstance;

  /**
   * Tells the content about an associated object frame.
   * This can be called multiple times for different frames.
   *
   * This is noscript because this is an internal method that will go away, and
   * because nsIObjectFrame is unscriptable.
   */
  [noscript] void hasNewFrame(in nsIObjectFrame aFrame);

  /**
   * If this object is in going to be printed, this method
   * returns the nsIObjectFrame object which should be used when
   * printing the plugin. The returned nsIFrame is in the original document,
   * not in the static clone.
   */
  [noscript] nsIFrame getPrintFrame();

  /*
   * Notifications from pluginhost that our instance crashed or was destroyed.
   */
  [noscript] void pluginDestroyed();
  [noscript] void pluginCrashed(in nsIPluginTag pluginTag,
                                in AString pluginDumpID,
                                in boolean submittedCrashReport);

  /**
   * Forces a re-evaluation and reload of the tag, optionally invalidating its
   * click-to-play state.  This can be used when the MIME type that provides a
   * type has changed, for instance, to force the tag to re-evalulate the
   * handler to use.
   */
  void reload(in boolean aClearActivation);

  /**
   * This attribute will return true if the current content type has been
   * activated, either explicitly or by passing checks that would have it be
   * click-to-play.
   */
  readonly attribute boolean activated;

  [noscript] void stopPluginInstance();

  [noscript] void syncStartPluginInstance();
  [noscript] void asyncStartPluginInstance();

  /**
   * Puts the tag in the "waiting on a channel" state and adopts this
   * channel. This does not override the normal logic of examining attributes
   * and the channel type, so the load may cancel this channel if it decides not
   * to use one.
   *
   * This assumes:
   *  - This tag has not begun loading yet
   *  - This channel has not yet hit OnStartRequest
   *  - The caller will continue to pass channel events to us as a listener
   */
  [noscript] void initializeFromChannel(in nsIRequest request);

  /**
   * The URL of the data/src loaded in the object. This may be null (i.e.
   * an <embed> with no src).
   */
  readonly attribute nsIURI srcURI;

  /**
   * Disable the use of fake plugins and reload the tag if necessary.
   */
  void skipFakePlugins();

  /**
   * Switch the tag into the TYPE_DOCUMENT state, and returns the
   * BrowsingContext which the load should complete in.
   */
  [noscript] BrowsingContext upgradeLoadToDocument(in nsIChannel channel);
};