1 /* 2 * Copyright (c) 2002-2025 Gargoyle Software Inc. 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * https://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 package org.htmlunit; 16 17 import org.htmlunit.javascript.HtmlUnitScriptable; 18 19 /** 20 * A window opened in JavaScript via either <code>window.showModalDialog</code> 21 * or <code>window.showModelessDialog</code>. 22 * @author Daniel Gredler 23 * @author Ronald Brill 24 */ 25 public class DialogWindow extends WebWindowImpl { 26 27 /** The arguments object exposed via the <code>dialogArguments</code> JavaScript property. */ 28 private final Object arguments_; 29 30 /** 31 * Creates a new instance. 32 * @param webClient the web client that "owns" this window 33 * @param arguments the arguments object exposed via the <code>dialogArguments</code> JavaScript property 34 */ 35 protected DialogWindow(final WebClient webClient, final Object arguments) { 36 super(webClient); 37 arguments_ = arguments; 38 performRegistration(); 39 } 40 41 /** 42 * {@inheritDoc} 43 */ 44 @Override 45 protected boolean isJavaScriptInitializationNeeded(final Page page) { 46 return getScriptableObject() == null; 47 } 48 49 /** 50 * {@inheritDoc} 51 */ 52 @Override 53 public WebWindow getParentWindow() { 54 return this; 55 } 56 57 /** 58 * {@inheritDoc} 59 */ 60 @Override 61 public WebWindow getTopWindow() { 62 return this; 63 } 64 65 /** 66 * {@inheritDoc} 67 */ 68 @Override 69 public <T extends HtmlUnitScriptable> void setScriptableObject(final T scriptObject) { 70 if (scriptObject != null) { 71 scriptObject.put("dialogArguments", scriptObject, arguments_); 72 } 73 super.setScriptableObject(scriptObject); 74 } 75 76 /** 77 * Closes this window. 78 */ 79 public void close() { 80 getJobManager().shutdown(); 81 destroyChildren(); 82 getWebClient().deregisterWebWindow(this); 83 } 84 85 /** 86 * Returns a string representation of this object. 87 * @return a string representation of this object 88 */ 89 @Override 90 public String toString() { 91 return "DialogWindow[name=\"" + getName() + "\"]"; 92 } 93 }