1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 package org.htmlunit.html;
16
17 import org.htmlunit.Page;
18 import org.htmlunit.StringWebResponse;
19 import org.htmlunit.WebResponse;
20 import org.htmlunit.WebWindow;
21 import org.htmlunit.WebWindowImpl;
22
23
24
25
26
27
28
29
30 public class FrameWindow extends WebWindowImpl {
31
32
33 public enum PageDenied {
34
35 NONE,
36
37
38 BY_X_FRAME_OPTIONS,
39
40
41 BY_CONTENT_SECURIRY_POLICY }
42
43 private final BaseFrameElement frame_;
44 private PageDenied pageDenied_;
45
46
47
48
49 FrameWindow(final BaseFrameElement frame) {
50 super(frame.getPage().getWebClient());
51 frame_ = frame;
52 performRegistration();
53
54 final WebWindowImpl parent = (WebWindowImpl) frame_.getPage().getEnclosingWindow();
55 parent.addChildWindow(this);
56 }
57
58
59
60
61
62 @Override
63 public String getName() {
64 return frame_.getNameAttribute();
65 }
66
67
68
69
70
71 @Override
72 public void setName(final String name) {
73 frame_.setNameAttribute(name);
74 }
75
76
77
78
79 @Override
80 public WebWindow getParentWindow() {
81 return frame_.getPage().getEnclosingWindow();
82 }
83
84
85
86
87 @Override
88 public WebWindow getTopWindow() {
89 return getParentWindow().getTopWindow();
90 }
91
92
93
94
95 @Override
96 protected boolean isJavaScriptInitializationNeeded(final Page page) {
97 return getScriptableObject() == null
98 || !(page.getWebResponse() instanceof StringWebResponse
99 && ((StringWebResponse) page.getWebResponse()).isFromJavascript());
100
101 }
102
103
104
105
106
107
108
109 public HtmlPage getEnclosingPage() {
110 return (HtmlPage) frame_.getPage();
111 }
112
113
114
115
116 @Override
117 public void setEnclosedPage(final Page page) {
118 setPageDenied(PageDenied.NONE);
119 super.setEnclosedPage(page);
120
121
122
123
124 final WebResponse webResponse = page.getWebResponse();
125 if (webResponse instanceof StringWebResponse) {
126 final StringWebResponse response = (StringWebResponse) webResponse;
127 if (response.isFromJavascript()) {
128 final BaseFrameElement frame = getFrameElement();
129 frame.setContentLoaded();
130 }
131 }
132 }
133
134
135
136
137
138 public BaseFrameElement getFrameElement() {
139 return frame_;
140 }
141
142
143
144
145
146 @Override
147 public String toString() {
148 return "FrameWindow[name=\"" + getName() + "\"]";
149 }
150
151
152
153
154 public void close() {
155 final WebWindowImpl parent = (WebWindowImpl) getParentWindow();
156 parent.removeChildWindow(this);
157 getWebClient().deregisterWebWindow(this);
158 }
159
160
161
162
163
164 public void setPageDenied(final PageDenied pageDenied) {
165 pageDenied_ = pageDenied;
166 }
167
168
169
170
171 public PageDenied getPageDenied() {
172 return pageDenied_;
173 }
174 }