1 /* 2 * Copyright (C) 2007 Ryan Leavengood <leavengood@gmail.com> 3 * Copyright (C) 2009 Maxime Simon <simon.maxime@gmail.com> 4 * Copyright (C) 2010 Stephan Aßmus <superstippi@gmx.de> 5 * Copyright 2013-2014 Haiku, Inc. All rights reserved. 6 * 7 * Redistribution and use in source and binary forms, with or without 8 * modification, are permitted provided that the following conditions 9 * are met: 10 * 1. Redistributions of source code must retain the above copyright 11 * notice, this list of conditions and the following disclaimer. 12 * 2. Redistributions in binary form must reproduce the above copyright 13 * notice, this list of conditions and the following disclaimer in the 14 * documentation and/or other materials provided with the distribution. 15 * 16 * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY 17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 19 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR 20 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 21 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 22 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 23 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 24 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 26 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27 */ 28 #ifndef BROWSER_WINDOW_H 29 #define BROWSER_WINDOW_H 30 31 32 #include "WebWindow.h" 33 34 #include <Messenger.h> 35 #include <String.h> 36 #include <UrlContext.h> 37 38 class BButton; 39 class BCheckBox; 40 class BDirectory; 41 class BFile; 42 class BFilePanel; 43 class BGroupLayout; 44 class BLayoutItem; 45 class BMenu; 46 class BMenuItem; 47 class BMessageRunner; 48 class BPath; 49 class BStatusBar; 50 class BStringView; 51 class BTextControl; 52 class BWebView; 53 54 class BookmarkBar; 55 class SettingsMessage; 56 class TabManager; 57 class URLInputGroup; 58 59 namespace BPrivate { 60 class BIconButton; 61 } 62 63 using BPrivate::BIconButton; 64 65 enum { 66 INTERFACE_ELEMENT_MENU = 1 << 0, 67 INTERFACE_ELEMENT_TABS = 1 << 1, 68 INTERFACE_ELEMENT_NAVIGATION = 1 << 2, 69 INTERFACE_ELEMENT_STATUS = 1 << 3, 70 71 INTERFACE_ELEMENT_ALL = 0xffff 72 }; 73 74 enum NewPagePolicy { 75 OpenBlankPage = 0, 76 OpenStartPage = 1, 77 OpenSearchPage = 2, 78 CloneCurrentPage = 3 79 }; 80 81 enum StartUpPolicy { 82 ResumePriorSession = 0, 83 StartNewSession = 1 84 }; 85 86 enum { 87 NEW_WINDOW = 'nwnd', 88 NEW_TAB = 'ntab', 89 WINDOW_OPENED = 'wndo', 90 WINDOW_CLOSED = 'wndc', 91 SHOW_DOWNLOAD_WINDOW = 'sdwd', 92 SHOW_SETTINGS_WINDOW = 'sswd', 93 SHOW_CONSOLE_WINDOW = 'scwd', 94 SHOW_COOKIE_WINDOW = 'skwd' 95 }; 96 97 98 class BrowserWindow : public BWebWindow { 99 public: 100 BrowserWindow(BRect frame, 101 SettingsMessage* appSettings, 102 const BString& url, 103 BPrivate::Network::BUrlContext* context, 104 uint32 interfaceElements 105 = INTERFACE_ELEMENT_ALL, 106 BWebView* webView = NULL); 107 virtual ~BrowserWindow(); 108 109 virtual void DispatchMessage(BMessage* message, 110 BHandler* target); 111 virtual void MessageReceived(BMessage* message); 112 virtual status_t Archive(BMessage* archive, bool deep =true) const; 113 virtual bool QuitRequested(); 114 virtual void MenusBeginning(); 115 virtual void MenusEnded(); 116 117 virtual void ScreenChanged(BRect screenSize, 118 color_space format); 119 virtual void WorkspacesChanged(uint32 oldWorkspaces, 120 uint32 newWorkspaces); 121 122 virtual void SetCurrentWebView(BWebView* view); 123 124 bool IsBlankTab() const; 125 void CreateNewTab(const BString& url, bool select, 126 BWebView* webView = 0); 127 128 BRect WindowFrame() const; 129 130 void ToggleFullscreen(); 131 132 private: 133 // WebPage notification API implementations 134 virtual void NavigationRequested(const BString& url, 135 BWebView* view); 136 virtual void NewWindowRequested(const BString& url, 137 bool primaryAction); 138 virtual void CloseWindowRequested(BWebView* view); 139 virtual void NewPageCreated(BWebView* view, 140 BRect windowFrame, bool modalDialog, 141 bool resizable, bool activate); 142 virtual void LoadNegotiating(const BString& url, 143 BWebView* view); 144 virtual void LoadCommitted(const BString& url, 145 BWebView* view); 146 virtual void LoadProgress(float progress, BWebView* view); 147 virtual void LoadFailed(const BString& url, BWebView* view); 148 virtual void LoadFinished(const BString& url, 149 BWebView* view); 150 virtual void MainDocumentError(const BString& failingURL, 151 const BString& localizedDescription, 152 BWebView* view); 153 virtual void TitleChanged(const BString& title, 154 BWebView* view); 155 virtual void IconReceived(const BBitmap* icon, 156 BWebView* view); 157 virtual void ResizeRequested(float width, float height, 158 BWebView* view); 159 virtual void SetToolBarsVisible(bool flag, BWebView* view); 160 virtual void SetStatusBarVisible(bool flag, BWebView* view); 161 virtual void SetMenuBarVisible(bool flag, BWebView* view); 162 virtual void SetResizable(bool flag, BWebView* view); 163 virtual void StatusChanged(const BString& status, 164 BWebView* view); 165 virtual void NavigationCapabilitiesChanged( 166 bool canGoBackward, bool canGoForward, 167 bool canStop, BWebView* view); 168 virtual void UpdateGlobalHistory(const BString& url); 169 virtual bool AuthenticationChallenge(BString message, 170 BString& inOutUser, BString& inOutPassword, 171 bool& inOutRememberCredentials, 172 uint32 failureCount, BWebView* view); 173 174 private: 175 void _UpdateTitle(const BString &title); 176 void _UpdateTabGroupVisibility(); 177 bool _TabGroupShouldBeVisible() const; 178 void _ShutdownTab(int32 index); 179 void _TabChanged(int32 index); 180 181 status_t _BookmarkPath(BPath& path) const; 182 void _CreateBookmark(const BPath& path, 183 BString fileName, const BString& title, 184 const BString& url, const BBitmap* miniIcon, 185 const BBitmap* largeIcon); 186 void _CreateBookmark(BMessage* message); 187 void _CreateBookmark(); 188 void _ShowBookmarks(); 189 bool _CheckBookmarkExists(BDirectory& directory, 190 const BString& fileName, 191 const BString& url) const; 192 bool _ReadURLAttr(BFile& bookmarkFile, 193 BString& url) const; 194 void _AddBookmarkURLsRecursively( 195 BDirectory& directory, 196 BMessage* message, 197 uint32& addedCount) const; 198 199 void _SetPageIcon(BWebView* view, 200 const BBitmap* icon); 201 202 void _UpdateHistoryMenu(); 203 void _UpdateClipboardItems(); 204 205 bool _ShowPage(BWebView* view); 206 207 void _ToggleFullscreen(); 208 void _ResizeToScreen(); 209 void _SetAutoHideInterfaceInFullscreen(bool doIt); 210 void _CheckAutoHideInterface(); 211 void _ShowInterface(bool show); 212 void _ShowProgressBar(bool); 213 void _InvokeButtonVisibly(BButton* button); 214 215 BString _NewTabURL(bool isNewWindow) const; 216 217 BString _EncodeURIComponent(const BString& search); 218 void _VisitURL(const BString& url); 219 void _VisitSearchEngine(const BString& search); 220 inline bool _IsValidDomainChar(char ch); 221 void _SmartURLHandler(const BString& url); 222 223 void _HandlePageSourceResult( 224 const BMessage* message); 225 226 void _ShowBookmarkBar(bool show); 227 228 private: 229 BMenu* fHistoryMenu; 230 int32 fHistoryMenuFixedItemCount; 231 232 BMenuItem* fCutMenuItem; 233 BMenuItem* fCopyMenuItem; 234 BMenuItem* fPasteMenuItem; 235 BMenuItem* fFindPreviousMenuItem; 236 BMenuItem* fFindNextMenuItem; 237 BMenuItem* fZoomTextOnlyMenuItem; 238 BMenuItem* fFullscreenItem; 239 BMenuItem* fBackMenuItem; 240 BMenuItem* fForwardMenuItem; 241 242 BIconButton* fBackButton; 243 BIconButton* fForwardButton; 244 BIconButton* fStopButton; 245 BIconButton* fHomeButton; 246 URLInputGroup* fURLInputGroup; 247 BStringView* fStatusText; 248 BStatusBar* fLoadingProgressBar; 249 250 BGroupLayout* fMenuGroup; 251 BLayoutItem* fTabGroup; 252 BLayoutItem* fNavigationGroup; 253 BLayoutItem* fFindGroup; 254 BLayoutItem* fStatusGroup; 255 BLayoutItem* fToggleFullscreenButton; 256 257 BTextControl* fFindTextControl; 258 BButton* fFindPreviousButton; 259 BButton* fFindNextButton; 260 BButton* fFindCloseButton; 261 BCheckBox* fFindCaseSensitiveCheckBox; 262 TabManager* fTabManager; 263 264 bool fIsFullscreen; 265 bool fInterfaceVisible; 266 bool fMenusRunning; 267 BRect fNonFullscreenWindowFrame; 268 BMessageRunner* fPulseRunner; 269 uint32 fVisibleInterfaceElements; 270 bigtime_t fLastMouseMovedTime; 271 BPoint fLastMousePos; 272 273 BReference<BPrivate::Network::BUrlContext> fContext; 274 275 // cached settings 276 SettingsMessage* fAppSettings; 277 bool fZoomTextOnly; 278 bool fShowTabsIfSinglePageOpen; 279 bool fAutoHideInterfaceInFullscreenMode; 280 bool fAutoHidePointer; 281 uint32 fNewWindowPolicy; 282 uint32 fNewTabPolicy; 283 BString fStartPageURL; 284 BString fSearchPageURL; 285 286 BMenuItem* fBookmarkBarMenuItem; 287 BookmarkBar* fBookmarkBar; 288 BFilePanel* fSavePanel; 289 }; 290 291 292 #endif // BROWSER_WINDOW_H 293