/* ============================================================================== This file is part of the JUCE library - "Jules' Utility Class Extensions" Copyright 2004-11 by Raw Material Software Ltd. ------------------------------------------------------------------------------ JUCE can be redistributed and/or modified under the terms of the GNU General Public License (Version 2), as published by the Free Software Foundation. A copy of the license is included in the JUCE distribution, or can be found online at www.gnu.org/licenses. JUCE is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ------------------------------------------------------------------------------ To release a closed-source product which uses JUCE, commercial licenses are available: visit www.rawmaterialsoftware.com/juce for more information. ============================================================================== */ #ifndef __JUCE_WEBBROWSERCOMPONENT_JUCEHEADER__ #define __JUCE_WEBBROWSERCOMPONENT_JUCEHEADER__ #if JUCE_WEB_BROWSER || DOXYGEN #if ! DOXYGEN class WebBrowserComponentInternal; #endif //============================================================================== /** A component that displays an embedded web browser. The browser itself will be platform-dependent. On the Mac, probably Safari, on Windows, probably IE. */ class JUCE_API WebBrowserComponent : public Component { public: //============================================================================== /** Creates a WebBrowserComponent. Once it's created and visible, send the browser to a URL using goToURL(). @param unloadPageWhenBrowserIsHidden if this is true, then when the browser component is taken offscreen, it'll clear the current page and replace it with a blank page - this can be handy to stop the browser using resources in the background when it's not actually being used. */ explicit WebBrowserComponent (bool unloadPageWhenBrowserIsHidden = true); /** Destructor. */ ~WebBrowserComponent(); //============================================================================== /** Sends the browser to a particular URL. @param url the URL to go to. @param headers an optional set of parameters to put in the HTTP header. If you supply this, it should be a set of string in the form "HeaderKey: HeaderValue" @param postData an optional block of data that will be attached to the HTTP POST request */ void goToURL (const String& url, const StringArray* headers = nullptr, const MemoryBlock* postData = nullptr); /** Stops the current page loading. */ void stop(); /** Sends the browser back one page. */ void goBack(); /** Sends the browser forward one page. */ void goForward(); /** Refreshes the browser. */ void refresh(); //============================================================================== /** This callback is called when the browser is about to navigate to a new location. You can override this method to perform some action when the user tries to go to a particular URL. To allow the operation to carry on, return true, or return false to stop the navigation happening. */ virtual bool pageAboutToLoad (const String& newURL); //============================================================================== /** @internal */ void paint (Graphics& g); /** @internal */ void resized(); /** @internal */ void parentHierarchyChanged(); /** @internal */ void visibilityChanged(); private: //============================================================================== WebBrowserComponentInternal* browser; bool blankPageShown, unloadPageWhenBrowserIsHidden; String lastURL; StringArray lastHeaders; MemoryBlock lastPostData; void reloadLastURL(); void checkWindowAssociation(); JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (WebBrowserComponent); }; #endif #endif // __JUCE_WEBBROWSERCOMPONENT_JUCEHEADER__