/******************************************************************************* * Copyright (c) 2016 Red Hat, Inc. * Distributed under license by Red Hat, Inc. All rights reserved. * This program is made available under the terms of the * Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.jboss.tools.browsersim.widgets; import org.eclipse.swt.browser.ProgressListener; import org.jboss.tools.browsersim.browser.IBrowser; import org.jboss.tools.browsersim.wait.AbstractWait; import org.jboss.tools.browsersim.wait.PageIsLoaded; import org.jboss.tools.browsersim.wait.TimePeriod; import org.jboss.tools.browsersim.wait.WaitUntil; public class Browser { IBrowser browser; BrowserProgressListener browserProgressListener; public Browser() { this.browser = WidgetLookup.getBrowsersimBrowser(); this.browserProgressListener = new BrowserProgressListener(this); } /** * Sets given URL in specified {@link org.eclipse.swt.browser.Browser}. * * @param browser to handle * @param url URL to set * @return true if the operation was successful, false otherwise. */ public boolean setURL(final String url) { setUpProgressListener(); boolean result = RDDisplay.syncExec(new ResultRunnable<Boolean>() { @Override public Boolean run() { return browser.setUrl(url); } }); new WaitUntil(new PageIsLoaded(this), TimePeriod.LONG); // Unfortunately Browser needs some time to get ready even when page is fully loaded AbstractWait.sleep(TimePeriod.NORMAL); resetProgressListener(); return result; } public String getURL() { return RDDisplay.syncExec(new ResultRunnable<String>() { @Override public String run() { return browser.getUrl(); } }); } public String getText(){ return RDDisplay.syncExec(new ResultRunnable<String>() { @Override public String run() { return browser.getText(); } }); } public IBrowser getSWTWidget(){ return browser; } public boolean isPageLoaded() { return browserProgressListener.isDone(); } public Object evaluate(final String script) { return RDDisplay.syncExec(new ResultRunnable<Object>() { @Override public Object run() { return browser.evaluate(script); } }); } public boolean execute(final String script) { return RDDisplay.syncExec(new ResultRunnable<Boolean>() { @Override public Boolean run() { return browser.execute(script); } }); } public void forward() { setUpProgressListener(); RDDisplay.syncExec(new ResultRunnable<Boolean>() { @Override public Boolean run() { return browser.forward(); } }); new WaitUntil(new PageIsLoaded(this), TimePeriod.LONG); // Unfortunately Browser needs some time to get ready even when page is fully loaded AbstractWait.sleep(TimePeriod.SHORT); resetProgressListener(); } public void back() { setUpProgressListener(); RDDisplay.syncExec(new ResultRunnable<Boolean>() { @Override public Boolean run() { return browser.back(); } }); new WaitUntil(new PageIsLoaded(this), TimePeriod.LONG); // Unfortunately Browser needs some time to get ready even when page is fully loaded AbstractWait.sleep(TimePeriod.SHORT); resetProgressListener(); } private void setUpProgressListener (){ addProgressListener(browserProgressListener); browserProgressListener.setDone(false); } private void resetProgressListener (){ removeProgressListener(browserProgressListener); browserProgressListener.setDone(true); } public void addProgressListener(final ProgressListener progressListener) { RDDisplay.syncExec(new Runnable() { @Override public void run() { browser.addProgressListener(progressListener); } }); } public void removeProgressListener(final ProgressListener progressListener) { RDDisplay.syncExec(new Runnable() { @Override public void run() { browser.removeProgressListener(progressListener); } }); } }