summaryrefslogtreecommitdiff
path: root/docshell/base/nsILoadContext.idl
blob: b0da7597b2e8de610acbd46d0e0113257108605c (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
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
 * vim: ft=cpp tw=78 sw=2 et ts=2 sts=2 cin
 * 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 mozIDOMWindowProxy;
interface nsIDOMElement;

%{C++
#ifdef MOZILLA_INTERNAL_API
#include "mozilla/BasePrincipal.h" // for DocShellOriginAttributes
#endif
%}

/**
 * An nsILoadContext represents the context of a load.  This interface
 * can be queried for various information about where the load is
 * happening.
 */
[scriptable, uuid(2813a7a3-d084-4d00-acd0-f76620315c02)]
interface nsILoadContext : nsISupports
{
  /**
   * associatedWindow is the window with which the load is associated, if any.
   * Note that the load may be triggered by a document which is different from
   * the document in associatedWindow, and in fact the source of the load need
   * not be same-origin with the document in associatedWindow.  This attribute
   * may be null if there is no associated window.
   */
  readonly attribute mozIDOMWindowProxy associatedWindow;

  /**
   * topWindow is the top window which is of same type as associatedWindow.
   * This is equivalent to associatedWindow.top, but is provided here as a
   * convenience.  All the same caveats as associatedWindow of apply, of
   * course.  This attribute may be null if there is no associated window.
   */
  readonly attribute mozIDOMWindowProxy topWindow;

  /**
   * topFrameElement is the <iframe>, <frame>, or <browser> element which
   * contains the topWindow with which the load is associated.
   *
   * Note that we may have a topFrameElement even when we don't have an
   * associatedWindow, if the topFrameElement's content lives out of process.
   * topFrameElement is available in single-process and multiprocess contexts.
   * Note that topFrameElement may be in chrome even when the nsILoadContext is
   * associated with content.
   */
  readonly attribute nsIDOMElement topFrameElement;

  /**
   * If this LoadContext corresponds to a nested remote iframe, we don't have
   * access to the topFrameElement.  Instead, we must use this id to send
   * messages. A return value of 0 signifies that this load context is not for
   * a nested frame.
   */
  readonly attribute unsigned long long nestedFrameId;

  /**
   * True if the load context is content (as opposed to chrome).  This is
   * determined based on the type of window the load is performed in, NOT based
   * on any URIs that might be around.
   */
  readonly attribute boolean isContent;

  /*
   * Attribute that determines if private browsing should be used. May not be
   * changed after a document has been loaded in this context.
   */
  attribute boolean usePrivateBrowsing;

  /**
   * Attribute that determines if remote (out-of-process) tabs should be used.
   */
  readonly attribute boolean useRemoteTabs;

%{C++
  /**
   * De-XPCOMed getter to make call-sites cleaner.
   */
  bool UsePrivateBrowsing() {
    bool usingPB;
    GetUsePrivateBrowsing(&usingPB);
    return usingPB;
  }

  bool UseRemoteTabs() {
    bool usingRT;
    GetUseRemoteTabs(&usingRT);
    return usingRT;
  }
%}

  /**
   * Set the private browsing state of the load context, meant to be used internally.
   */
  [noscript] void SetPrivateBrowsing(in boolean aInPrivateBrowsing);

  /**
   * Set the remote tabs state of the load context, meant to be used internally.
   */
  [noscript] void SetRemoteTabs(in boolean aUseRemoteTabs);

  /**
   * Returns true iff the load is occurring inside an isolated mozbrowser
   * element. <iframe mozbrowser mozapp> and <xul:browser> are not considered to
   * be mozbrowser elements.  <iframe mozbrowser noisolation> does not count as
   * isolated since isolation is disabled.  Isolation can only be disabled if
   * the containing document is chrome.
   */
  readonly attribute boolean isInIsolatedMozBrowserElement;

  /**
   * Returns the app id of the app the load is occurring is in. Returns
   * nsIScriptSecurityManager::NO_APP_ID if the load is not part of an app.
   */
  readonly attribute unsigned long appId;

  /**
   * A dictionary of the non-default origin attributes associated with this
   * nsILoadContext.
   */
  readonly attribute jsval originAttributes;

%{C++
#ifdef MOZILLA_INTERNAL_API
  /**
   * The C++ getter for origin attributes.
   *
   * Defined in LoadContext.cpp
   */
  bool GetOriginAttributes(mozilla::DocShellOriginAttributes& aAttrs);
#endif
%}

  /**
   * Returns true if tracking protection is enabled for the load context.
   */
  boolean IsTrackingProtectionOn();

%{C++
  /**
   * De-XPCOMed getter to make call-sites cleaner.
   */
  bool UseTrackingProtection() {
    bool usingTP;
    IsTrackingProtectionOn(&usingTP);
    return usingTP;
  }
%}
};