1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 package org.htmlunit;
16
17 import org.apache.commons.logging.Log;
18 import org.apache.commons.logging.LogFactory;
19 import org.htmlunit.html.HtmlPage;
20 import org.htmlunit.util.UrlUtils;
21
22
23
24
25
26
27
28
29
30
31
32 public class TopLevelWindow extends WebWindowImpl {
33
34
35 private static final Log LOG = LogFactory.getLog(TopLevelWindow.class);
36
37
38 private WebWindow opener_;
39
40
41
42
43
44
45 protected TopLevelWindow(final String name, final WebClient webClient) {
46 super(webClient);
47 WebAssert.notNull("name", name);
48 setName(name);
49 performRegistration();
50 }
51
52
53
54
55
56 @Override
57 public WebWindow getParentWindow() {
58 return this;
59 }
60
61
62
63
64
65 @Override
66 public WebWindow getTopWindow() {
67 return this;
68 }
69
70
71
72
73 @Override
74 protected boolean isJavaScriptInitializationNeeded(final Page page) {
75 return getScriptableObject() == null
76 || page.getUrl() == UrlUtils.URL_ABOUT_BLANK
77 || !(page.getWebResponse() instanceof StringWebResponse);
78
79 }
80
81
82
83
84
85 @Override
86 public String toString() {
87 return "TopLevelWindow[name=\"" + getName() + "\"]";
88 }
89
90
91
92
93
94 public void setOpener(final WebWindow opener) {
95 opener_ = opener;
96 }
97
98
99
100
101
102 public WebWindow getOpener() {
103 return opener_;
104 }
105
106
107
108
109 public void close() {
110 close(false);
111 }
112
113
114
115
116
117
118
119
120 public void close(final boolean ignoreOnbeforeunloadAccepted) {
121 final Page page = getEnclosedPage();
122
123
124
125 boolean rejected = false;
126 try {
127 if (page != null && page.isHtmlPage()) {
128 final HtmlPage htmlPage = (HtmlPage) page;
129 final boolean accepted = ignoreOnbeforeunloadAccepted || htmlPage.isOnbeforeunloadAccepted();
130 if (!accepted) {
131 LOG.debug("The registered OnbeforeunloadHandler rejected the window close event.");
132 rejected = true;
133 }
134 }
135 }
136 finally {
137 if (!rejected) {
138 try {
139 setClosed();
140 }
141 finally {
142 if (page != null) {
143 page.cleanUp();
144 }
145
146 try {
147 getJobManager().shutdown();
148 }
149 finally {
150 try {
151 destroyChildren();
152 }
153 finally {
154 getWebClient().deregisterWebWindow(this);
155 }
156 }
157 }
158 }
159 }
160 }
161 }