diff --git a/mozilla/camino/BookmarksDataSource.mm b/mozilla/camino/BookmarksDataSource.mm index 47b1462cd75..473371e5f18 100644 --- a/mozilla/camino/BookmarksDataSource.mm +++ b/mozilla/camino/BookmarksDataSource.mm @@ -396,7 +396,7 @@ content->GetAttr(kNameSpaceID_None, BookmarksService::gHrefAtom, href); if (!href.IsEmpty()) { NSString* url = [NSString stringWithCharacters: href.get() length: href.Length()]; - [[[mBrowserWindowController getBrowserWrapper] getBrowserView] loadURI: url flags: NSLoadFlagsNone]; + [[[mBrowserWindowController getBrowserWrapper] getBrowserView] loadURI: url referrer:nil flags: NSLoadFlagsNone]; // Focus and activate our content area. [[[mBrowserWindowController getBrowserWrapper] getBrowserView] setActive: YES]; } @@ -682,7 +682,7 @@ PRBool loadInBackground; pref->GetBoolPref("browser.tabs.loadInBackground", &loadInBackground); - [mBrowserWindowController openNewTabWithURL: hrefStr loadInBackground: loadInBackground]; + [mBrowserWindowController openNewTabWithURL: hrefStr referrer:nil loadInBackground: loadInBackground]; } } @@ -702,7 +702,7 @@ nsAutoString group; [item contentNode]->GetAttr(kNameSpaceID_None, BookmarksService::gGroupAtom, group); if (group.IsEmpty()) - [mBrowserWindowController openNewWindowWithURL: hrefStr loadInBackground: NO]; + [mBrowserWindowController openNewWindowWithURL: hrefStr referrer: nil loadInBackground: NO]; else { nsCOMPtr elt(do_QueryInterface([item contentNode])); [mBrowserWindowController openNewWindowWithGroup: elt loadInBackground: NO]; diff --git a/mozilla/camino/BookmarksService.mm b/mozilla/camino/BookmarksService.mm index 3ed2528a0d3..d4c6159f850 100644 --- a/mozilla/camino/BookmarksService.mm +++ b/mozilla/camino/BookmarksService.mm @@ -786,7 +786,7 @@ BookmarksService::OpenMenuBookmark(BrowserWindowController* aController, id aMen NSString* url = [NSString stringWithCharacters: href.get() length: href.Length()]; // Now load the URL in the window. - [aController loadURL:url]; + [aController loadURL:url referrer:nil]; // Focus and activate our content area. [[[aController getBrowserWrapper] getBrowserView] setActive: YES]; @@ -1013,7 +1013,7 @@ BookmarksService::OpenBookmarkGroup(id aTabView, nsIDOMElement* aFolder) else tabViewItem = [aTabView tabViewItemAtIndex: currentIndex]; - [[[tabViewItem view] getBrowserView] loadURI: url + [[[tabViewItem view] getBrowserView] loadURI: url referrer:nil flags: NSLoadFlagsNone]; } } diff --git a/mozilla/camino/BrowserWindowController.h b/mozilla/camino/BrowserWindowController.h index 1174453044d..b1eb019dd1e 100644 --- a/mozilla/camino/BrowserWindowController.h +++ b/mozilla/camino/BrowserWindowController.h @@ -120,7 +120,8 @@ class nsIDOMNode; NSToolbarItem* mSidebarToolbarItem; BOOL mInitialized; - NSString* mURL; + NSString* mPendingURL; + NSString* mPendingReferrer; CHBrowserWrapper* mBrowserView; @@ -155,7 +156,7 @@ class nsIDOMNode; -(id)getTabBrowser; -(CHBrowserWrapper*)getBrowserWrapper; -- (void)loadURL:(NSString*)aURLSpec; +- (void)loadURL:(NSString*)aURLSpec referrer:(NSString*)aReferrer; - (void)updateLocationFields:(NSString *)locationString; - (void)updateToolbarItems; - (void)focusURLBar; @@ -209,9 +210,9 @@ class nsIDOMNode; -(void)enterModalSession; --(void)openNewWindowWithURL: (NSString*)aURLSpec loadInBackground: (BOOL)aLoadInBG; +-(void)openNewWindowWithURL: (NSString*)aURLSpec referrer:(NSString*)aReferrer loadInBackground: (BOOL)aLoadInBG; -(void)openNewWindowWithGroup: (nsIDOMElement*)aFolderElement loadInBackground: (BOOL)aLoadInBG; --(void)openNewTabWithURL: (NSString*)aURLSpec loadInBackground: (BOOL)aLoadInBG; +-(void)openNewTabWithURL: (NSString*)aURLSpec referrer: (NSString*)aReferrer loadInBackground: (BOOL)aLoadInBG; -(void)autosaveWindowFrame; -(void)disableAutosave; diff --git a/mozilla/camino/BrowserWindowController.mm b/mozilla/camino/BrowserWindowController.mm index 64443ecfa54..a51199ac397 100644 --- a/mozilla/camino/BrowserWindowController.mm +++ b/mozilla/camino/BrowserWindowController.mm @@ -273,12 +273,20 @@ static NSArray* sToolbarDefaults = nil; // We now remove the IB tab, then add one of our own. [mTabBrowser removeTabViewItem:[mTabBrowser tabViewItemAtIndex:0]]; - [self newTab:mShouldLoadHomePage]; - if (mURL) { + // create ourselves a new tab and fill it with the appropriate content. If we + // have a URL pending to be opened here, don't load anything in it, otherwise, + // load the homepage if that's what the user wants (or about:blank). + [self newTab:(!mPendingURL && mShouldLoadHomePage)]; + + // we have a url "pending" from the "open new window with link" command. Deal + // with it now that everything is loaded. + if (mPendingURL) { if (mShouldLoadHomePage) - [self loadURL: mURL]; - [mURL release]; + [self loadURL: mPendingURL referrer:mPendingReferrer]; + [mPendingURL release]; + [mPendingReferrer release]; + mPendingURL = mPendingReferrer = nil; } [mSidebarDrawer setDelegate: self]; @@ -332,7 +340,7 @@ static NSArray* sToolbarDefaults = nil; - (void)drawerDidOpen:(NSNotification *)aNotification { // XXXdwh This is temporary. - // [[mSidebarBrowserView getBrowserView] loadURI: @"http://tinderbox.mozilla.org/SeaMonkey/panel.html" flags:NSLoadFlagsNone]; + // [[mSidebarBrowserView getBrowserView] loadURI: @"http://tinderbox.mozilla.org/SeaMonkey/panel.html" referrer: nil flags:NSLoadFlagsNone]; // Toggle the sidebar icon. if(mSidebarToolbarItem) @@ -346,7 +354,7 @@ static NSArray* sToolbarDefaults = nil; [mSidebarToolbarItem setImage:[NSImage imageNamed:@"sidebarClosed"]]; // XXXdwh ignore for now. - // [[mSidebarBrowserView getBrowserView] loadURI: @"about:blank" flags:NSLoadFlagsNone]; + // [[mSidebarBrowserView getBrowserView] loadURI: @"about:blank" referrer:nil flags:NSLoadFlagsNone]; if (mDrawerCachedFrame) { mDrawerCachedFrame = NO; @@ -619,7 +627,7 @@ static NSArray* sToolbarDefaults = nil; { [mLocationSheetWindow orderOut:self]; [NSApp endSheet:mLocationSheetWindow returnCode:1]; - [self loadURL:[mLocationSheetURLField stringValue]]; + [self loadURL:[mLocationSheetURLField stringValue] referrer:nil]; // Focus and activate our content area. [[mBrowserView getBrowserView] setActive: YES]; @@ -668,7 +676,7 @@ static NSArray* sToolbarDefaults = nil; [newView setFrame: NSZeroRect]; [newView setIsBookmarksImport: YES]; [[[self window] contentView] addSubview: newView]; - [[newView getBrowserView] loadURI:aURLSpec flags:NSLoadFlagsNone]; + [[newView getBrowserView] loadURI:aURLSpec referrer: nil flags:NSLoadFlagsNone]; } - (IBAction)goToLocationFromToolbarURLField:(id)sender @@ -676,7 +684,7 @@ static NSArray* sToolbarDefaults = nil; // trim off any whitespace around url NSMutableString *theURL = [[NSMutableString alloc] initWithString:[sender stringValue]]; CFStringTrimWhitespace((CFMutableStringRef)theURL); - [self loadURL:theURL]; + [self loadURL:theURL referrer:nil]; [theURL release]; // Focus and activate our content area. @@ -703,7 +711,7 @@ static NSArray* sToolbarDefaults = nil; PRBool loadInBackground; nsCOMPtr pref(do_GetService("@mozilla.org/preferences-service;1")); pref->GetBoolPref("browser.tabs.loadInBackground", &loadInBackground); - [self openNewTabWithURL: viewSource loadInBackground: loadInBackground]; + [self openNewTabWithURL: viewSource referrer:nil loadInBackground: loadInBackground]; } - (void)printDocument @@ -729,7 +737,7 @@ static NSArray* sToolbarDefaults = nil; searchEngine = @"http://dmoz.org/"; } - [[mBrowserView getBrowserView] loadURI:searchEngine flags:NSLoadFlagsNone]; + [[mBrowserView getBrowserView] loadURI:searchEngine referrer: nil flags:NSLoadFlagsNone]; } @@ -771,7 +779,7 @@ static NSArray* sToolbarDefaults = nil; { NSString *pageToLoad = NSLocalizedStringFromTable(@"ThrobberPageDefault", @"WebsiteDefaults", nil); if (![pageToLoad isEqualToString:@"ThrobberPageDefault"]) - [self loadURL:pageToLoad]; + [self loadURL:pageToLoad referrer:nil]; } - (void)startThrobber @@ -859,7 +867,7 @@ static NSArray* sToolbarDefaults = nil; - (IBAction)home:(id)aSender { - [[mBrowserView getBrowserView] loadURI:[[CHPreferenceManager sharedInstance] homePage:NO] flags:NSLoadFlagsNone]; + [[mBrowserView getBrowserView] loadURI:[[CHPreferenceManager sharedInstance] homePage:NO] referrer: nil flags:NSLoadFlagsNone]; } - (IBAction)toggleSidebar:(id)aSender @@ -877,14 +885,18 @@ static NSArray* sToolbarDefaults = nil; [[self window] makeFirstResponder: resp]; } --(void)loadURL:(NSString*)aURLSpec +-(void)loadURL:(NSString*)aURLSpec referrer:(NSString*)aReferrer { if (mInitialized) { - [[mBrowserView getBrowserView] loadURI:aURLSpec flags:NSLoadFlagsNone]; + [[mBrowserView getBrowserView] loadURI:aURLSpec referrer:aReferrer flags:NSLoadFlagsNone]; } else { - mURL = aURLSpec; - [mURL retain]; + // we haven't yet initialized all the browser machinery, stash the url and referrer + // until we're ready in windowDidLoad: + mPendingURL = aURLSpec; + [mPendingURL retain]; + mPendingReferrer = aReferrer; + [mPendingReferrer retain]; } } @@ -923,7 +935,7 @@ static NSArray* sToolbarDefaults = nil; [mTabBrowser addTabViewItem: newTab]; if (allowHomepage) - [[newView getBrowserView] loadURI: ((newTabPage == 1) ? [[CHPreferenceManager sharedInstance] homePage: NO] : @"about:blank") flags:NSLoadFlagsNone]; + [[newView getBrowserView] loadURI: ((newTabPage == 1) ? [[CHPreferenceManager sharedInstance] homePage: NO] : @"about:blank") referrer:nil flags:NSLoadFlagsNone]; [mTabBrowser selectLastTabViewItem: self]; @@ -990,13 +1002,13 @@ static NSArray* sToolbarDefaults = nil; return mBrowserView; } --(void)openNewWindowWithURL: (NSString*)aURLSpec loadInBackground: (BOOL)aLoadInBG +-(void)openNewWindowWithURL: (NSString*)aURLSpec referrer: (NSString*)aReferrer loadInBackground: (BOOL)aLoadInBG { // Autosave our dimensions before we open a new window. That ensures the size ends up matching. [self autosaveWindowFrame]; BrowserWindowController* browser = [[BrowserWindowController alloc] initWithWindowNibName: @"BrowserWindow"]; - [browser loadURL: aURLSpec]; + [browser loadURL: aURLSpec referrer:aReferrer]; if (aLoadInBG) [[browser window] orderWindow: NSWindowBelow relativeTo: [[self window] windowNumber]]; else { @@ -1025,7 +1037,7 @@ static NSArray* sToolbarDefaults = nil; [mSidebarBookmarksDataSource openBookmarkGroup: tabBrowser groupElement: aFolderElement]; } --(void)openNewTabWithURL: (NSString*)aURLSpec loadInBackground: (BOOL)aLoadInBG +-(void)openNewTabWithURL: (NSString*)aURLSpec referrer:(NSString*)aReferrer loadInBackground: (BOOL)aLoadInBG { NSTabViewItem* newTab = [[[NSTabViewItem alloc] initWithIdentifier: nil] autorelease]; @@ -1039,7 +1051,7 @@ static NSArray* sToolbarDefaults = nil; [newTab setLabel: NSLocalizedString(@"TabLoading", @"")]; [newTab setView: newView]; - [[newView getBrowserView] loadURI:aURLSpec flags:NSLoadFlagsNone]; + [[newView getBrowserView] loadURI:aURLSpec referrer:aReferrer flags:NSLoadFlagsNone]; if (!aLoadInBG) { [mTabBrowser selectTabViewItem: newTab]; @@ -1257,10 +1269,12 @@ static NSArray* sToolbarDefaults = nil; PRBool loadInBackground; pref->GetBoolPref("browser.tabs.loadInBackground", &loadInBackground); + NSString* referrer = [[mBrowserView getBrowserView] getFocusedURLString]; + if (aUseWindow) - [self openNewWindowWithURL: hrefStr loadInBackground: loadInBackground]; + [self openNewWindowWithURL: hrefStr referrer:referrer loadInBackground: loadInBackground]; else - [self openNewTabWithURL: hrefStr loadInBackground: loadInBackground]; + [self openNewTabWithURL: hrefStr referrer:referrer loadInBackground: loadInBackground]; } - (IBAction)savePageAs:(id)aSender @@ -1330,8 +1344,9 @@ static NSArray* sToolbarDefaults = nil; imgElement->GetSrc(url); NSString* urlStr = [NSString stringWithCharacters: url.get() length:nsCRT::strlen(url.get())]; - - [self loadURL: urlStr]; + NSString* referrer = [[mBrowserView getBrowserView] getFocusedURLString]; + + [self loadURL: urlStr referrer:referrer]; // Focus and activate our content area. [[mBrowserView getBrowserView] setActive: YES]; diff --git a/mozilla/camino/CHBookmarksButton.mm b/mozilla/camino/CHBookmarksButton.mm index bb0f10b4139..5b2c696deb8 100644 --- a/mozilla/camino/CHBookmarksButton.mm +++ b/mozilla/camino/CHBookmarksButton.mm @@ -63,7 +63,7 @@ NSString* url = [NSString stringWithCString: cref.get()]; // Now load the URL in the window. - [[[self window] windowController] loadURL: url]; + [[[self window] windowController] loadURL: url referrer:nil]; // Focus and activate our content area. [[[[[self window] windowController] getBrowserWrapper] getBrowserView] setActive: YES]; diff --git a/mozilla/camino/CHBrowserView.h b/mozilla/camino/CHBrowserView.h index b4bdeb4b651..d40b341987e 100644 --- a/mozilla/camino/CHBrowserView.h +++ b/mozilla/camino/CHBrowserView.h @@ -126,7 +126,7 @@ enum { - (nsIDOMWindow*)getContentWindow; // nsIWebNavigation methods -- (void)loadURI:(NSString *)urlSpec flags:(unsigned int)flags; +- (void)loadURI:(NSString *)urlSpec referrer:(NSString*)referrer flags:(unsigned int)flags; - (void)reload:(unsigned int)flags; - (BOOL)canGoBack; - (BOOL)canGoForward; diff --git a/mozilla/camino/CHBrowserView.mm b/mozilla/camino/CHBrowserView.mm index b01a40e5b70..36fbbe8ae6d 100644 --- a/mozilla/camino/CHBrowserView.mm +++ b/mozilla/camino/CHBrowserView.mm @@ -1042,7 +1042,7 @@ nsHeaderSniffer::OnSecurityChange(nsIWebProgress *aWebProgress, nsIRequest *aReq return window; } -- (void)loadURI:(NSString *)urlSpec flags:(unsigned int)flags +- (void)loadURI:(NSString *)urlSpec referrer:(NSString*)referrer flags:(unsigned int)flags { nsCOMPtr nav = do_QueryInterface(_webBrowser); @@ -1051,6 +1051,9 @@ nsHeaderSniffer::OnSecurityChange(nsIWebProgress *aWebProgress, nsIRequest *aReq [urlSpec getCharacters:specStr]; specStr[length] = PRUnichar(0); + nsCOMPtr referrerURI; + if ( referrer ) + NS_NewURI(getter_AddRefs(referrerURI), [referrer cString]); PRUint32 navFlags = nsIWebNavigation::LOAD_FLAGS_NONE; if (flags & NSLoadFlagsDontPutInHistory) { @@ -1064,7 +1067,7 @@ nsHeaderSniffer::OnSecurityChange(nsIWebProgress *aWebProgress, nsIRequest *aReq nsIWebNavigation::LOAD_FLAGS_BYPASS_PROXY; } - nsresult rv = nav->LoadURI(specStr, navFlags, nsnull, nsnull, nsnull); + nsresult rv = nav->LoadURI(specStr, navFlags, referrerURI, nsnull, nsnull); if (NS_FAILED(rv)) { // XXX need to throw } diff --git a/mozilla/camino/CHBrowserWrapper.mm b/mozilla/camino/CHBrowserWrapper.mm index 22aab312e29..664f3122b57 100644 --- a/mozilla/camino/CHBrowserWrapper.mm +++ b/mozilla/camino/CHBrowserWrapper.mm @@ -85,7 +85,7 @@ static const char* ioServiceContractID = "@mozilla.org/network/io-service;1"; - (IBAction)load:(id)sender { - [mBrowserView loadURI:[urlbar stringValue] flags:NSLoadFlagsNone]; + [mBrowserView loadURI:[urlbar stringValue] referrer:nil flags:NSLoadFlagsNone]; } -(void)disconnectView diff --git a/mozilla/camino/CHExtendedTabView.h b/mozilla/camino/CHExtendedTabView.h index 912821cfbed..b314b08a065 100644 --- a/mozilla/camino/CHExtendedTabView.h +++ b/mozilla/camino/CHExtendedTabView.h @@ -30,6 +30,6 @@ - (BOOL)autoHides; - (void)setAutoHides:(BOOL)newSetting; --(void)addTabForURL:(NSString*)aURL; +-(void)addTabForURL:(NSString*)aURL referrer:(NSString*)aReferrer; @end diff --git a/mozilla/camino/CHExtendedTabView.mm b/mozilla/camino/CHExtendedTabView.mm index ec0e6ca7b73..49142dc7b0a 100644 --- a/mozilla/camino/CHExtendedTabView.mm +++ b/mozilla/camino/CHExtendedTabView.mm @@ -135,11 +135,11 @@ - (void)handleDropOnTab:(NSTabViewItem*)overTabViewItem overContent:(BOOL)overContentArea withURL:(NSString*)url { if (overTabViewItem) { - [[[overTabViewItem view] getBrowserView] loadURI: url flags: NSLoadFlagsNone]; + [[[overTabViewItem view] getBrowserView] loadURI: url referrer:nil flags: NSLoadFlagsNone]; } else if (overContentArea) { - [[[[self selectedTabViewItem] view] getBrowserView] loadURI: url flags: NSLoadFlagsNone]; + [[[[self selectedTabViewItem] view] getBrowserView] loadURI: url referrer:nil flags: NSLoadFlagsNone]; } else - [self addTabForURL:url]; + [self addTabForURL:url referrer:nil]; } // NSDraggingDestination /////////// @@ -222,7 +222,7 @@ return YES; } --(void)addTabForURL:(NSString*)aURL +-(void)addTabForURL:(NSString*)aURL referrer:(NSString*)aReferrer { NSTabViewItem* tabViewItem; CHBrowserWrapper* newView; @@ -234,7 +234,7 @@ [tabViewItem setView: newView]; [self addTabViewItem: tabViewItem]; - [[[tabViewItem view] getBrowserView] loadURI: aURL + [[[tabViewItem view] getBrowserView] loadURI: aURL referrer:aReferrer flags: NSLoadFlagsNone]; } diff --git a/mozilla/camino/CHGetURLCommand.mm b/mozilla/camino/CHGetURLCommand.mm index 42f80ddb57f..6c4558ea2fb 100644 --- a/mozilla/camino/CHGetURLCommand.mm +++ b/mozilla/camino/CHGetURLCommand.mm @@ -24,17 +24,13 @@ #import "CHGetURLCommand.h" #import -#import "BrowserWindowController.h" - -#include "nsIPref.h" -#include "nsCOMPtr.h" -#include "nsIServiceManagerUtils.h" +#import "MainController.h" @implementation CHGetURLCommand - (id)performDefaultImplementation { - [[NSApp delegate] openNewWindowOrTabWithURL:[self directParameter]]; + [(MainController*)[NSApp delegate] openNewWindowOrTabWithURL:[self directParameter] andReferrer:nil]; return nil; } diff --git a/mozilla/camino/CHHistoryDataSource.mm b/mozilla/camino/CHHistoryDataSource.mm index 3d1fe73fb67..19838398c89 100644 --- a/mozilla/camino/CHHistoryDataSource.mm +++ b/mozilla/camino/CHHistoryDataSource.mm @@ -148,7 +148,7 @@ valueLiteral->GetValue(getter_Copies(literalValue)); NSString* url = [NSString stringWithCharacters: literalValue.get() length: literalValue.Length()]; - [[[mBrowserWindowController getBrowserWrapper] getBrowserView] loadURI: url flags: NSLoadFlagsNone]; + [[[mBrowserWindowController getBrowserWrapper] getBrowserView] loadURI: url referrer: nil flags: NSLoadFlagsNone]; // Focus and activate our content area. [[[mBrowserWindowController getBrowserWrapper] getBrowserView] setActive: YES]; } diff --git a/mozilla/camino/ContentClickListener.mm b/mozilla/camino/ContentClickListener.mm index 2fa4f593978..de9cb17be25 100644 --- a/mozilla/camino/ContentClickListener.mm +++ b/mozilla/camino/ContentClickListener.mm @@ -300,12 +300,14 @@ ContentClickListener::MouseClick(nsIDOMEvent* aEvent) pref->GetBoolPref("browser.tabs.opentabfor.middleclick", &useTab); PRBool loadInBackground; pref->GetBoolPref("browser.tabs.loadInBackground", &loadInBackground); + NSString* referrer = [[[mBrowserController getBrowserWrapper] getBrowserView] getFocusedURLString]; + if (shiftKey) loadInBackground = !loadInBackground; if (useTab) - [mBrowserController openNewTabWithURL: hrefStr loadInBackground: loadInBackground]; + [mBrowserController openNewTabWithURL: hrefStr referrer:referrer loadInBackground: loadInBackground]; else - [mBrowserController openNewWindowWithURL: hrefStr loadInBackground: loadInBackground]; + [mBrowserController openNewWindowWithURL: hrefStr referrer:referrer loadInBackground: loadInBackground]; } else if (altKey) { // The user wants to save this link. diff --git a/mozilla/camino/MainController.h b/mozilla/camino/MainController.h index dd1eea59397..b6bbe4ef807 100644 --- a/mozilla/camino/MainController.h +++ b/mozilla/camino/MainController.h @@ -124,8 +124,8 @@ class BookmarksService; //Help menu actions -(IBAction) feedbackLink:(id)aSender; --(BrowserWindowController*)openBrowserWindowWithURL: (NSString*)aURL; -- (void)openNewWindowOrTabWithURL:(NSString*)inURLString; +-(BrowserWindowController*)openBrowserWindowWithURL: (NSString*)aURL andReferrer: (NSString*)aReferrer; +- (void)openNewWindowOrTabWithURL:(NSString*)inURLString andReferrer:(NSString*)aReferrer; - (void)adjustCloseWindowMenuItemKeyEquivalent:(BOOL)inHaveTabs; - (void)adjustCloseTabMenuItemKeyEquivalent:(BOOL)inHaveTabs; diff --git a/mozilla/camino/MainController.mm b/mozilla/camino/MainController.mm index cd37866e2c4..74fcc3a0aa2 100644 --- a/mozilla/camino/MainController.mm +++ b/mozilla/camino/MainController.mm @@ -160,7 +160,7 @@ static const char* ioServiceContractID = "@mozilla.org/network/io-service;1"; // Now open the new window. NSString* homePage = mStartURL ? mStartURL : [mPreferenceManager homePage:YES]; - BrowserWindowController* controller = [self openBrowserWindowWithURL:homePage]; + BrowserWindowController* controller = [self openBrowserWindowWithURL:homePage andReferrer:nil]; if ([homePage isEqualToString: @"about:blank"]) [controller focusURLBar]; @@ -215,11 +215,11 @@ static const char* ioServiceContractID = "@mozilla.org/network/io-service;1"; // ---------------------- NSWindow* mainWindow = [mApplication mainWindow]; if (mainWindow) { - [[mainWindow windowController] loadURL:[url absoluteString]]; + [[mainWindow windowController] loadURL:[url absoluteString] referrer:nil]; [[[[mainWindow windowController] getBrowserWrapper] getBrowserView] setActive: YES]; } else - [self openBrowserWindowWithURL:[url absoluteString]]; + [self openBrowserWindowWithURL:[url absoluteString] andReferrer:nil]; } } @@ -227,7 +227,7 @@ static const char* ioServiceContractID = "@mozilla.org/network/io-service;1"; { NSWindow* mainWindow = [mApplication mainWindow]; if (!mainWindow) { - [self openBrowserWindowWithURL: @"about:blank"]; + [self openBrowserWindowWithURL: @"about:blank" andReferrer:nil]; mainWindow = [mApplication mainWindow]; } @@ -357,16 +357,16 @@ static const char* ioServiceContractID = "@mozilla.org/network/io-service;1"; } // open a new URL. This method always makes a new browser window --(BrowserWindowController*)openBrowserWindowWithURL: (NSString*)aURL +-(BrowserWindowController*)openBrowserWindowWithURL: (NSString*)aURL andReferrer: (NSString*)aReferrer { BrowserWindowController* browser = [[BrowserWindowController alloc] initWithWindowNibName: @"BrowserWindow"]; - [browser loadURL: aURL]; + [browser loadURL: aURL referrer:aReferrer]; [browser showWindow: self]; return browser; } // open a new URL, observing the prefs on how to behave -- (void)openNewWindowOrTabWithURL:(NSString*)inURLString +- (void)openNewWindowOrTabWithURL:(NSString*)inURLString andReferrer: (NSString*)aReferrer { // make sure we're initted [self preferenceManager]; @@ -388,12 +388,12 @@ static const char* ioServiceContractID = "@mozilla.org/network/io-service;1"; NSWindow* browserWindow = [self getFrontmostBrowserWindow]; if (reuseWindow && browserWindow) { controller = [browserWindow windowController]; - [controller openNewTabWithURL:inURLString loadInBackground:loadInBackground]; + [controller openNewTabWithURL:inURLString referrer:aReferrer loadInBackground:loadInBackground]; } else { // should use BrowserWindowController openNewWindowWithURL, but that method // really needs to be on the MainController - controller = [self openBrowserWindowWithURL: inURLString]; + controller = [self openBrowserWindowWithURL: inURLString andReferrer:aReferrer]; } [[[controller getBrowserWrapper] getBrowserView] setActive: YES]; @@ -472,7 +472,7 @@ static const char* ioServiceContractID = "@mozilla.org/network/io-service;1"; { NSWindow* mainWind = [mApplication mainWindow]; if (!mainWind) { - [self openBrowserWindowWithURL: @"about:blank"]; + [self openBrowserWindowWithURL: @"about:blank" andReferrer:nil]; mainWind = [mApplication mainWindow]; } @@ -483,7 +483,7 @@ static const char* ioServiceContractID = "@mozilla.org/network/io-service;1"; { NSWindow* mainWindow = [mApplication mainWindow]; if (!mainWindow) { - [self openBrowserWindowWithURL: @"about:blank"]; + [self openBrowserWindowWithURL: @"about:blank" andReferrer:nil]; mainWindow = [mApplication mainWindow]; } @@ -531,7 +531,7 @@ static const char* ioServiceContractID = "@mozilla.org/network/io-service;1"; [self openBrowserWindowWithURL:[[NSURL fileURLWithPath:filename] absoluteString]]; } */ - [self openNewWindowOrTabWithURL:[[NSURL fileURLWithPath:filename] absoluteString]]; + [self openNewWindowOrTabWithURL:[[NSURL fileURLWithPath:filename] absoluteString] andReferrer:nil]; return YES; } @@ -677,7 +677,7 @@ static const char* ioServiceContractID = "@mozilla.org/network/io-service;1"; { NSWindow* mainWindow = [mApplication mainWindow]; if (!mainWindow) { - [self openBrowserWindowWithURL: @"about:blank"]; + [self openBrowserWindowWithURL: @"about:blank" andReferrer:nil]; mainWindow = [mApplication mainWindow]; } @@ -695,7 +695,7 @@ static const char* ioServiceContractID = "@mozilla.org/network/io-service;1"; { NSString *pageToLoad = NSLocalizedStringFromTable(@"FeedbackPageDefault", @"WebsiteDefaults", nil); if (![pageToLoad isEqualToString:@"FeedbackPageDefault"]) - [self openNewWindowOrTabWithURL:pageToLoad]; + [self openNewWindowOrTabWithURL:pageToLoad andReferrer:nil]; } + (NSImage*)createImageForDragging:(NSImage*)aIcon title:(NSString*)aTitle @@ -809,7 +809,7 @@ static const char* ioServiceContractID = "@mozilla.org/network/io-service;1"; [urlString appendString:tmpString]; } - [self openBrowserWindowWithURL:urlString]; + [self openBrowserWindowWithURL:urlString andReferrer:nil]; } @end diff --git a/mozilla/camino/src/appleevents/GetURLCommand.mm b/mozilla/camino/src/appleevents/GetURLCommand.mm index 42f80ddb57f..6c4558ea2fb 100644 --- a/mozilla/camino/src/appleevents/GetURLCommand.mm +++ b/mozilla/camino/src/appleevents/GetURLCommand.mm @@ -24,17 +24,13 @@ #import "CHGetURLCommand.h" #import -#import "BrowserWindowController.h" - -#include "nsIPref.h" -#include "nsCOMPtr.h" -#include "nsIServiceManagerUtils.h" +#import "MainController.h" @implementation CHGetURLCommand - (id)performDefaultImplementation { - [[NSApp delegate] openNewWindowOrTabWithURL:[self directParameter]]; + [(MainController*)[NSApp delegate] openNewWindowOrTabWithURL:[self directParameter] andReferrer:nil]; return nil; } diff --git a/mozilla/camino/src/application/MainController.h b/mozilla/camino/src/application/MainController.h index dd1eea59397..b6bbe4ef807 100644 --- a/mozilla/camino/src/application/MainController.h +++ b/mozilla/camino/src/application/MainController.h @@ -124,8 +124,8 @@ class BookmarksService; //Help menu actions -(IBAction) feedbackLink:(id)aSender; --(BrowserWindowController*)openBrowserWindowWithURL: (NSString*)aURL; -- (void)openNewWindowOrTabWithURL:(NSString*)inURLString; +-(BrowserWindowController*)openBrowserWindowWithURL: (NSString*)aURL andReferrer: (NSString*)aReferrer; +- (void)openNewWindowOrTabWithURL:(NSString*)inURLString andReferrer:(NSString*)aReferrer; - (void)adjustCloseWindowMenuItemKeyEquivalent:(BOOL)inHaveTabs; - (void)adjustCloseTabMenuItemKeyEquivalent:(BOOL)inHaveTabs; diff --git a/mozilla/camino/src/application/MainController.mm b/mozilla/camino/src/application/MainController.mm index cd37866e2c4..74fcc3a0aa2 100644 --- a/mozilla/camino/src/application/MainController.mm +++ b/mozilla/camino/src/application/MainController.mm @@ -160,7 +160,7 @@ static const char* ioServiceContractID = "@mozilla.org/network/io-service;1"; // Now open the new window. NSString* homePage = mStartURL ? mStartURL : [mPreferenceManager homePage:YES]; - BrowserWindowController* controller = [self openBrowserWindowWithURL:homePage]; + BrowserWindowController* controller = [self openBrowserWindowWithURL:homePage andReferrer:nil]; if ([homePage isEqualToString: @"about:blank"]) [controller focusURLBar]; @@ -215,11 +215,11 @@ static const char* ioServiceContractID = "@mozilla.org/network/io-service;1"; // ---------------------- NSWindow* mainWindow = [mApplication mainWindow]; if (mainWindow) { - [[mainWindow windowController] loadURL:[url absoluteString]]; + [[mainWindow windowController] loadURL:[url absoluteString] referrer:nil]; [[[[mainWindow windowController] getBrowserWrapper] getBrowserView] setActive: YES]; } else - [self openBrowserWindowWithURL:[url absoluteString]]; + [self openBrowserWindowWithURL:[url absoluteString] andReferrer:nil]; } } @@ -227,7 +227,7 @@ static const char* ioServiceContractID = "@mozilla.org/network/io-service;1"; { NSWindow* mainWindow = [mApplication mainWindow]; if (!mainWindow) { - [self openBrowserWindowWithURL: @"about:blank"]; + [self openBrowserWindowWithURL: @"about:blank" andReferrer:nil]; mainWindow = [mApplication mainWindow]; } @@ -357,16 +357,16 @@ static const char* ioServiceContractID = "@mozilla.org/network/io-service;1"; } // open a new URL. This method always makes a new browser window --(BrowserWindowController*)openBrowserWindowWithURL: (NSString*)aURL +-(BrowserWindowController*)openBrowserWindowWithURL: (NSString*)aURL andReferrer: (NSString*)aReferrer { BrowserWindowController* browser = [[BrowserWindowController alloc] initWithWindowNibName: @"BrowserWindow"]; - [browser loadURL: aURL]; + [browser loadURL: aURL referrer:aReferrer]; [browser showWindow: self]; return browser; } // open a new URL, observing the prefs on how to behave -- (void)openNewWindowOrTabWithURL:(NSString*)inURLString +- (void)openNewWindowOrTabWithURL:(NSString*)inURLString andReferrer: (NSString*)aReferrer { // make sure we're initted [self preferenceManager]; @@ -388,12 +388,12 @@ static const char* ioServiceContractID = "@mozilla.org/network/io-service;1"; NSWindow* browserWindow = [self getFrontmostBrowserWindow]; if (reuseWindow && browserWindow) { controller = [browserWindow windowController]; - [controller openNewTabWithURL:inURLString loadInBackground:loadInBackground]; + [controller openNewTabWithURL:inURLString referrer:aReferrer loadInBackground:loadInBackground]; } else { // should use BrowserWindowController openNewWindowWithURL, but that method // really needs to be on the MainController - controller = [self openBrowserWindowWithURL: inURLString]; + controller = [self openBrowserWindowWithURL: inURLString andReferrer:aReferrer]; } [[[controller getBrowserWrapper] getBrowserView] setActive: YES]; @@ -472,7 +472,7 @@ static const char* ioServiceContractID = "@mozilla.org/network/io-service;1"; { NSWindow* mainWind = [mApplication mainWindow]; if (!mainWind) { - [self openBrowserWindowWithURL: @"about:blank"]; + [self openBrowserWindowWithURL: @"about:blank" andReferrer:nil]; mainWind = [mApplication mainWindow]; } @@ -483,7 +483,7 @@ static const char* ioServiceContractID = "@mozilla.org/network/io-service;1"; { NSWindow* mainWindow = [mApplication mainWindow]; if (!mainWindow) { - [self openBrowserWindowWithURL: @"about:blank"]; + [self openBrowserWindowWithURL: @"about:blank" andReferrer:nil]; mainWindow = [mApplication mainWindow]; } @@ -531,7 +531,7 @@ static const char* ioServiceContractID = "@mozilla.org/network/io-service;1"; [self openBrowserWindowWithURL:[[NSURL fileURLWithPath:filename] absoluteString]]; } */ - [self openNewWindowOrTabWithURL:[[NSURL fileURLWithPath:filename] absoluteString]]; + [self openNewWindowOrTabWithURL:[[NSURL fileURLWithPath:filename] absoluteString] andReferrer:nil]; return YES; } @@ -677,7 +677,7 @@ static const char* ioServiceContractID = "@mozilla.org/network/io-service;1"; { NSWindow* mainWindow = [mApplication mainWindow]; if (!mainWindow) { - [self openBrowserWindowWithURL: @"about:blank"]; + [self openBrowserWindowWithURL: @"about:blank" andReferrer:nil]; mainWindow = [mApplication mainWindow]; } @@ -695,7 +695,7 @@ static const char* ioServiceContractID = "@mozilla.org/network/io-service;1"; { NSString *pageToLoad = NSLocalizedStringFromTable(@"FeedbackPageDefault", @"WebsiteDefaults", nil); if (![pageToLoad isEqualToString:@"FeedbackPageDefault"]) - [self openNewWindowOrTabWithURL:pageToLoad]; + [self openNewWindowOrTabWithURL:pageToLoad andReferrer:nil]; } + (NSImage*)createImageForDragging:(NSImage*)aIcon title:(NSString*)aTitle @@ -809,7 +809,7 @@ static const char* ioServiceContractID = "@mozilla.org/network/io-service;1"; [urlString appendString:tmpString]; } - [self openBrowserWindowWithURL:urlString]; + [self openBrowserWindowWithURL:urlString andReferrer:nil]; } @end diff --git a/mozilla/camino/src/bookmarks/BookmarksButton.mm b/mozilla/camino/src/bookmarks/BookmarksButton.mm index bb0f10b4139..5b2c696deb8 100644 --- a/mozilla/camino/src/bookmarks/BookmarksButton.mm +++ b/mozilla/camino/src/bookmarks/BookmarksButton.mm @@ -63,7 +63,7 @@ NSString* url = [NSString stringWithCString: cref.get()]; // Now load the URL in the window. - [[[self window] windowController] loadURL: url]; + [[[self window] windowController] loadURL: url referrer:nil]; // Focus and activate our content area. [[[[[self window] windowController] getBrowserWrapper] getBrowserView] setActive: YES]; diff --git a/mozilla/camino/src/bookmarks/BookmarksDataSource.mm b/mozilla/camino/src/bookmarks/BookmarksDataSource.mm index 47b1462cd75..473371e5f18 100644 --- a/mozilla/camino/src/bookmarks/BookmarksDataSource.mm +++ b/mozilla/camino/src/bookmarks/BookmarksDataSource.mm @@ -396,7 +396,7 @@ content->GetAttr(kNameSpaceID_None, BookmarksService::gHrefAtom, href); if (!href.IsEmpty()) { NSString* url = [NSString stringWithCharacters: href.get() length: href.Length()]; - [[[mBrowserWindowController getBrowserWrapper] getBrowserView] loadURI: url flags: NSLoadFlagsNone]; + [[[mBrowserWindowController getBrowserWrapper] getBrowserView] loadURI: url referrer:nil flags: NSLoadFlagsNone]; // Focus and activate our content area. [[[mBrowserWindowController getBrowserWrapper] getBrowserView] setActive: YES]; } @@ -682,7 +682,7 @@ PRBool loadInBackground; pref->GetBoolPref("browser.tabs.loadInBackground", &loadInBackground); - [mBrowserWindowController openNewTabWithURL: hrefStr loadInBackground: loadInBackground]; + [mBrowserWindowController openNewTabWithURL: hrefStr referrer:nil loadInBackground: loadInBackground]; } } @@ -702,7 +702,7 @@ nsAutoString group; [item contentNode]->GetAttr(kNameSpaceID_None, BookmarksService::gGroupAtom, group); if (group.IsEmpty()) - [mBrowserWindowController openNewWindowWithURL: hrefStr loadInBackground: NO]; + [mBrowserWindowController openNewWindowWithURL: hrefStr referrer: nil loadInBackground: NO]; else { nsCOMPtr elt(do_QueryInterface([item contentNode])); [mBrowserWindowController openNewWindowWithGroup: elt loadInBackground: NO]; diff --git a/mozilla/camino/src/bookmarks/BookmarksService.mm b/mozilla/camino/src/bookmarks/BookmarksService.mm index 3ed2528a0d3..d4c6159f850 100644 --- a/mozilla/camino/src/bookmarks/BookmarksService.mm +++ b/mozilla/camino/src/bookmarks/BookmarksService.mm @@ -786,7 +786,7 @@ BookmarksService::OpenMenuBookmark(BrowserWindowController* aController, id aMen NSString* url = [NSString stringWithCharacters: href.get() length: href.Length()]; // Now load the URL in the window. - [aController loadURL:url]; + [aController loadURL:url referrer:nil]; // Focus and activate our content area. [[[aController getBrowserWrapper] getBrowserView] setActive: YES]; @@ -1013,7 +1013,7 @@ BookmarksService::OpenBookmarkGroup(id aTabView, nsIDOMElement* aFolder) else tabViewItem = [aTabView tabViewItemAtIndex: currentIndex]; - [[[tabViewItem view] getBrowserView] loadURI: url + [[[tabViewItem view] getBrowserView] loadURI: url referrer:nil flags: NSLoadFlagsNone]; } } diff --git a/mozilla/camino/src/browser/BrowserWindowController.h b/mozilla/camino/src/browser/BrowserWindowController.h index 1174453044d..b1eb019dd1e 100644 --- a/mozilla/camino/src/browser/BrowserWindowController.h +++ b/mozilla/camino/src/browser/BrowserWindowController.h @@ -120,7 +120,8 @@ class nsIDOMNode; NSToolbarItem* mSidebarToolbarItem; BOOL mInitialized; - NSString* mURL; + NSString* mPendingURL; + NSString* mPendingReferrer; CHBrowserWrapper* mBrowserView; @@ -155,7 +156,7 @@ class nsIDOMNode; -(id)getTabBrowser; -(CHBrowserWrapper*)getBrowserWrapper; -- (void)loadURL:(NSString*)aURLSpec; +- (void)loadURL:(NSString*)aURLSpec referrer:(NSString*)aReferrer; - (void)updateLocationFields:(NSString *)locationString; - (void)updateToolbarItems; - (void)focusURLBar; @@ -209,9 +210,9 @@ class nsIDOMNode; -(void)enterModalSession; --(void)openNewWindowWithURL: (NSString*)aURLSpec loadInBackground: (BOOL)aLoadInBG; +-(void)openNewWindowWithURL: (NSString*)aURLSpec referrer:(NSString*)aReferrer loadInBackground: (BOOL)aLoadInBG; -(void)openNewWindowWithGroup: (nsIDOMElement*)aFolderElement loadInBackground: (BOOL)aLoadInBG; --(void)openNewTabWithURL: (NSString*)aURLSpec loadInBackground: (BOOL)aLoadInBG; +-(void)openNewTabWithURL: (NSString*)aURLSpec referrer: (NSString*)aReferrer loadInBackground: (BOOL)aLoadInBG; -(void)autosaveWindowFrame; -(void)disableAutosave; diff --git a/mozilla/camino/src/browser/BrowserWindowController.mm b/mozilla/camino/src/browser/BrowserWindowController.mm index 64443ecfa54..a51199ac397 100644 --- a/mozilla/camino/src/browser/BrowserWindowController.mm +++ b/mozilla/camino/src/browser/BrowserWindowController.mm @@ -273,12 +273,20 @@ static NSArray* sToolbarDefaults = nil; // We now remove the IB tab, then add one of our own. [mTabBrowser removeTabViewItem:[mTabBrowser tabViewItemAtIndex:0]]; - [self newTab:mShouldLoadHomePage]; - if (mURL) { + // create ourselves a new tab and fill it with the appropriate content. If we + // have a URL pending to be opened here, don't load anything in it, otherwise, + // load the homepage if that's what the user wants (or about:blank). + [self newTab:(!mPendingURL && mShouldLoadHomePage)]; + + // we have a url "pending" from the "open new window with link" command. Deal + // with it now that everything is loaded. + if (mPendingURL) { if (mShouldLoadHomePage) - [self loadURL: mURL]; - [mURL release]; + [self loadURL: mPendingURL referrer:mPendingReferrer]; + [mPendingURL release]; + [mPendingReferrer release]; + mPendingURL = mPendingReferrer = nil; } [mSidebarDrawer setDelegate: self]; @@ -332,7 +340,7 @@ static NSArray* sToolbarDefaults = nil; - (void)drawerDidOpen:(NSNotification *)aNotification { // XXXdwh This is temporary. - // [[mSidebarBrowserView getBrowserView] loadURI: @"http://tinderbox.mozilla.org/SeaMonkey/panel.html" flags:NSLoadFlagsNone]; + // [[mSidebarBrowserView getBrowserView] loadURI: @"http://tinderbox.mozilla.org/SeaMonkey/panel.html" referrer: nil flags:NSLoadFlagsNone]; // Toggle the sidebar icon. if(mSidebarToolbarItem) @@ -346,7 +354,7 @@ static NSArray* sToolbarDefaults = nil; [mSidebarToolbarItem setImage:[NSImage imageNamed:@"sidebarClosed"]]; // XXXdwh ignore for now. - // [[mSidebarBrowserView getBrowserView] loadURI: @"about:blank" flags:NSLoadFlagsNone]; + // [[mSidebarBrowserView getBrowserView] loadURI: @"about:blank" referrer:nil flags:NSLoadFlagsNone]; if (mDrawerCachedFrame) { mDrawerCachedFrame = NO; @@ -619,7 +627,7 @@ static NSArray* sToolbarDefaults = nil; { [mLocationSheetWindow orderOut:self]; [NSApp endSheet:mLocationSheetWindow returnCode:1]; - [self loadURL:[mLocationSheetURLField stringValue]]; + [self loadURL:[mLocationSheetURLField stringValue] referrer:nil]; // Focus and activate our content area. [[mBrowserView getBrowserView] setActive: YES]; @@ -668,7 +676,7 @@ static NSArray* sToolbarDefaults = nil; [newView setFrame: NSZeroRect]; [newView setIsBookmarksImport: YES]; [[[self window] contentView] addSubview: newView]; - [[newView getBrowserView] loadURI:aURLSpec flags:NSLoadFlagsNone]; + [[newView getBrowserView] loadURI:aURLSpec referrer: nil flags:NSLoadFlagsNone]; } - (IBAction)goToLocationFromToolbarURLField:(id)sender @@ -676,7 +684,7 @@ static NSArray* sToolbarDefaults = nil; // trim off any whitespace around url NSMutableString *theURL = [[NSMutableString alloc] initWithString:[sender stringValue]]; CFStringTrimWhitespace((CFMutableStringRef)theURL); - [self loadURL:theURL]; + [self loadURL:theURL referrer:nil]; [theURL release]; // Focus and activate our content area. @@ -703,7 +711,7 @@ static NSArray* sToolbarDefaults = nil; PRBool loadInBackground; nsCOMPtr pref(do_GetService("@mozilla.org/preferences-service;1")); pref->GetBoolPref("browser.tabs.loadInBackground", &loadInBackground); - [self openNewTabWithURL: viewSource loadInBackground: loadInBackground]; + [self openNewTabWithURL: viewSource referrer:nil loadInBackground: loadInBackground]; } - (void)printDocument @@ -729,7 +737,7 @@ static NSArray* sToolbarDefaults = nil; searchEngine = @"http://dmoz.org/"; } - [[mBrowserView getBrowserView] loadURI:searchEngine flags:NSLoadFlagsNone]; + [[mBrowserView getBrowserView] loadURI:searchEngine referrer: nil flags:NSLoadFlagsNone]; } @@ -771,7 +779,7 @@ static NSArray* sToolbarDefaults = nil; { NSString *pageToLoad = NSLocalizedStringFromTable(@"ThrobberPageDefault", @"WebsiteDefaults", nil); if (![pageToLoad isEqualToString:@"ThrobberPageDefault"]) - [self loadURL:pageToLoad]; + [self loadURL:pageToLoad referrer:nil]; } - (void)startThrobber @@ -859,7 +867,7 @@ static NSArray* sToolbarDefaults = nil; - (IBAction)home:(id)aSender { - [[mBrowserView getBrowserView] loadURI:[[CHPreferenceManager sharedInstance] homePage:NO] flags:NSLoadFlagsNone]; + [[mBrowserView getBrowserView] loadURI:[[CHPreferenceManager sharedInstance] homePage:NO] referrer: nil flags:NSLoadFlagsNone]; } - (IBAction)toggleSidebar:(id)aSender @@ -877,14 +885,18 @@ static NSArray* sToolbarDefaults = nil; [[self window] makeFirstResponder: resp]; } --(void)loadURL:(NSString*)aURLSpec +-(void)loadURL:(NSString*)aURLSpec referrer:(NSString*)aReferrer { if (mInitialized) { - [[mBrowserView getBrowserView] loadURI:aURLSpec flags:NSLoadFlagsNone]; + [[mBrowserView getBrowserView] loadURI:aURLSpec referrer:aReferrer flags:NSLoadFlagsNone]; } else { - mURL = aURLSpec; - [mURL retain]; + // we haven't yet initialized all the browser machinery, stash the url and referrer + // until we're ready in windowDidLoad: + mPendingURL = aURLSpec; + [mPendingURL retain]; + mPendingReferrer = aReferrer; + [mPendingReferrer retain]; } } @@ -923,7 +935,7 @@ static NSArray* sToolbarDefaults = nil; [mTabBrowser addTabViewItem: newTab]; if (allowHomepage) - [[newView getBrowserView] loadURI: ((newTabPage == 1) ? [[CHPreferenceManager sharedInstance] homePage: NO] : @"about:blank") flags:NSLoadFlagsNone]; + [[newView getBrowserView] loadURI: ((newTabPage == 1) ? [[CHPreferenceManager sharedInstance] homePage: NO] : @"about:blank") referrer:nil flags:NSLoadFlagsNone]; [mTabBrowser selectLastTabViewItem: self]; @@ -990,13 +1002,13 @@ static NSArray* sToolbarDefaults = nil; return mBrowserView; } --(void)openNewWindowWithURL: (NSString*)aURLSpec loadInBackground: (BOOL)aLoadInBG +-(void)openNewWindowWithURL: (NSString*)aURLSpec referrer: (NSString*)aReferrer loadInBackground: (BOOL)aLoadInBG { // Autosave our dimensions before we open a new window. That ensures the size ends up matching. [self autosaveWindowFrame]; BrowserWindowController* browser = [[BrowserWindowController alloc] initWithWindowNibName: @"BrowserWindow"]; - [browser loadURL: aURLSpec]; + [browser loadURL: aURLSpec referrer:aReferrer]; if (aLoadInBG) [[browser window] orderWindow: NSWindowBelow relativeTo: [[self window] windowNumber]]; else { @@ -1025,7 +1037,7 @@ static NSArray* sToolbarDefaults = nil; [mSidebarBookmarksDataSource openBookmarkGroup: tabBrowser groupElement: aFolderElement]; } --(void)openNewTabWithURL: (NSString*)aURLSpec loadInBackground: (BOOL)aLoadInBG +-(void)openNewTabWithURL: (NSString*)aURLSpec referrer:(NSString*)aReferrer loadInBackground: (BOOL)aLoadInBG { NSTabViewItem* newTab = [[[NSTabViewItem alloc] initWithIdentifier: nil] autorelease]; @@ -1039,7 +1051,7 @@ static NSArray* sToolbarDefaults = nil; [newTab setLabel: NSLocalizedString(@"TabLoading", @"")]; [newTab setView: newView]; - [[newView getBrowserView] loadURI:aURLSpec flags:NSLoadFlagsNone]; + [[newView getBrowserView] loadURI:aURLSpec referrer:aReferrer flags:NSLoadFlagsNone]; if (!aLoadInBG) { [mTabBrowser selectTabViewItem: newTab]; @@ -1257,10 +1269,12 @@ static NSArray* sToolbarDefaults = nil; PRBool loadInBackground; pref->GetBoolPref("browser.tabs.loadInBackground", &loadInBackground); + NSString* referrer = [[mBrowserView getBrowserView] getFocusedURLString]; + if (aUseWindow) - [self openNewWindowWithURL: hrefStr loadInBackground: loadInBackground]; + [self openNewWindowWithURL: hrefStr referrer:referrer loadInBackground: loadInBackground]; else - [self openNewTabWithURL: hrefStr loadInBackground: loadInBackground]; + [self openNewTabWithURL: hrefStr referrer:referrer loadInBackground: loadInBackground]; } - (IBAction)savePageAs:(id)aSender @@ -1330,8 +1344,9 @@ static NSArray* sToolbarDefaults = nil; imgElement->GetSrc(url); NSString* urlStr = [NSString stringWithCharacters: url.get() length:nsCRT::strlen(url.get())]; - - [self loadURL: urlStr]; + NSString* referrer = [[mBrowserView getBrowserView] getFocusedURLString]; + + [self loadURL: urlStr referrer:referrer]; // Focus and activate our content area. [[mBrowserView getBrowserView] setActive: YES]; diff --git a/mozilla/camino/src/browser/BrowserWrapper.mm b/mozilla/camino/src/browser/BrowserWrapper.mm index 22aab312e29..664f3122b57 100644 --- a/mozilla/camino/src/browser/BrowserWrapper.mm +++ b/mozilla/camino/src/browser/BrowserWrapper.mm @@ -85,7 +85,7 @@ static const char* ioServiceContractID = "@mozilla.org/network/io-service;1"; - (IBAction)load:(id)sender { - [mBrowserView loadURI:[urlbar stringValue] flags:NSLoadFlagsNone]; + [mBrowserView loadURI:[urlbar stringValue] referrer:nil flags:NSLoadFlagsNone]; } -(void)disconnectView diff --git a/mozilla/camino/src/browser/ContentClickListener.mm b/mozilla/camino/src/browser/ContentClickListener.mm index 2fa4f593978..de9cb17be25 100644 --- a/mozilla/camino/src/browser/ContentClickListener.mm +++ b/mozilla/camino/src/browser/ContentClickListener.mm @@ -300,12 +300,14 @@ ContentClickListener::MouseClick(nsIDOMEvent* aEvent) pref->GetBoolPref("browser.tabs.opentabfor.middleclick", &useTab); PRBool loadInBackground; pref->GetBoolPref("browser.tabs.loadInBackground", &loadInBackground); + NSString* referrer = [[[mBrowserController getBrowserWrapper] getBrowserView] getFocusedURLString]; + if (shiftKey) loadInBackground = !loadInBackground; if (useTab) - [mBrowserController openNewTabWithURL: hrefStr loadInBackground: loadInBackground]; + [mBrowserController openNewTabWithURL: hrefStr referrer:referrer loadInBackground: loadInBackground]; else - [mBrowserController openNewWindowWithURL: hrefStr loadInBackground: loadInBackground]; + [mBrowserController openNewWindowWithURL: hrefStr referrer:referrer loadInBackground: loadInBackground]; } else if (altKey) { // The user wants to save this link. diff --git a/mozilla/camino/src/embedding/CHBrowserView.h b/mozilla/camino/src/embedding/CHBrowserView.h index b4bdeb4b651..d40b341987e 100644 --- a/mozilla/camino/src/embedding/CHBrowserView.h +++ b/mozilla/camino/src/embedding/CHBrowserView.h @@ -126,7 +126,7 @@ enum { - (nsIDOMWindow*)getContentWindow; // nsIWebNavigation methods -- (void)loadURI:(NSString *)urlSpec flags:(unsigned int)flags; +- (void)loadURI:(NSString *)urlSpec referrer:(NSString*)referrer flags:(unsigned int)flags; - (void)reload:(unsigned int)flags; - (BOOL)canGoBack; - (BOOL)canGoForward; diff --git a/mozilla/camino/src/embedding/CHBrowserView.mm b/mozilla/camino/src/embedding/CHBrowserView.mm index b01a40e5b70..36fbbe8ae6d 100644 --- a/mozilla/camino/src/embedding/CHBrowserView.mm +++ b/mozilla/camino/src/embedding/CHBrowserView.mm @@ -1042,7 +1042,7 @@ nsHeaderSniffer::OnSecurityChange(nsIWebProgress *aWebProgress, nsIRequest *aReq return window; } -- (void)loadURI:(NSString *)urlSpec flags:(unsigned int)flags +- (void)loadURI:(NSString *)urlSpec referrer:(NSString*)referrer flags:(unsigned int)flags { nsCOMPtr nav = do_QueryInterface(_webBrowser); @@ -1051,6 +1051,9 @@ nsHeaderSniffer::OnSecurityChange(nsIWebProgress *aWebProgress, nsIRequest *aReq [urlSpec getCharacters:specStr]; specStr[length] = PRUnichar(0); + nsCOMPtr referrerURI; + if ( referrer ) + NS_NewURI(getter_AddRefs(referrerURI), [referrer cString]); PRUint32 navFlags = nsIWebNavigation::LOAD_FLAGS_NONE; if (flags & NSLoadFlagsDontPutInHistory) { @@ -1064,7 +1067,7 @@ nsHeaderSniffer::OnSecurityChange(nsIWebProgress *aWebProgress, nsIRequest *aReq nsIWebNavigation::LOAD_FLAGS_BYPASS_PROXY; } - nsresult rv = nav->LoadURI(specStr, navFlags, nsnull, nsnull, nsnull); + nsresult rv = nav->LoadURI(specStr, navFlags, referrerURI, nsnull, nsnull); if (NS_FAILED(rv)) { // XXX need to throw } diff --git a/mozilla/camino/src/history/HistoryDataSource.mm b/mozilla/camino/src/history/HistoryDataSource.mm index 3d1fe73fb67..19838398c89 100644 --- a/mozilla/camino/src/history/HistoryDataSource.mm +++ b/mozilla/camino/src/history/HistoryDataSource.mm @@ -148,7 +148,7 @@ valueLiteral->GetValue(getter_Copies(literalValue)); NSString* url = [NSString stringWithCharacters: literalValue.get() length: literalValue.Length()]; - [[[mBrowserWindowController getBrowserWrapper] getBrowserView] loadURI: url flags: NSLoadFlagsNone]; + [[[mBrowserWindowController getBrowserWrapper] getBrowserView] loadURI: url referrer: nil flags: NSLoadFlagsNone]; // Focus and activate our content area. [[[mBrowserWindowController getBrowserWrapper] getBrowserView] setActive: YES]; } diff --git a/mozilla/chimera/BookmarksDataSource.mm b/mozilla/chimera/BookmarksDataSource.mm index 47b1462cd75..473371e5f18 100644 --- a/mozilla/chimera/BookmarksDataSource.mm +++ b/mozilla/chimera/BookmarksDataSource.mm @@ -396,7 +396,7 @@ content->GetAttr(kNameSpaceID_None, BookmarksService::gHrefAtom, href); if (!href.IsEmpty()) { NSString* url = [NSString stringWithCharacters: href.get() length: href.Length()]; - [[[mBrowserWindowController getBrowserWrapper] getBrowserView] loadURI: url flags: NSLoadFlagsNone]; + [[[mBrowserWindowController getBrowserWrapper] getBrowserView] loadURI: url referrer:nil flags: NSLoadFlagsNone]; // Focus and activate our content area. [[[mBrowserWindowController getBrowserWrapper] getBrowserView] setActive: YES]; } @@ -682,7 +682,7 @@ PRBool loadInBackground; pref->GetBoolPref("browser.tabs.loadInBackground", &loadInBackground); - [mBrowserWindowController openNewTabWithURL: hrefStr loadInBackground: loadInBackground]; + [mBrowserWindowController openNewTabWithURL: hrefStr referrer:nil loadInBackground: loadInBackground]; } } @@ -702,7 +702,7 @@ nsAutoString group; [item contentNode]->GetAttr(kNameSpaceID_None, BookmarksService::gGroupAtom, group); if (group.IsEmpty()) - [mBrowserWindowController openNewWindowWithURL: hrefStr loadInBackground: NO]; + [mBrowserWindowController openNewWindowWithURL: hrefStr referrer: nil loadInBackground: NO]; else { nsCOMPtr elt(do_QueryInterface([item contentNode])); [mBrowserWindowController openNewWindowWithGroup: elt loadInBackground: NO]; diff --git a/mozilla/chimera/BookmarksService.mm b/mozilla/chimera/BookmarksService.mm index 3ed2528a0d3..d4c6159f850 100644 --- a/mozilla/chimera/BookmarksService.mm +++ b/mozilla/chimera/BookmarksService.mm @@ -786,7 +786,7 @@ BookmarksService::OpenMenuBookmark(BrowserWindowController* aController, id aMen NSString* url = [NSString stringWithCharacters: href.get() length: href.Length()]; // Now load the URL in the window. - [aController loadURL:url]; + [aController loadURL:url referrer:nil]; // Focus and activate our content area. [[[aController getBrowserWrapper] getBrowserView] setActive: YES]; @@ -1013,7 +1013,7 @@ BookmarksService::OpenBookmarkGroup(id aTabView, nsIDOMElement* aFolder) else tabViewItem = [aTabView tabViewItemAtIndex: currentIndex]; - [[[tabViewItem view] getBrowserView] loadURI: url + [[[tabViewItem view] getBrowserView] loadURI: url referrer:nil flags: NSLoadFlagsNone]; } } diff --git a/mozilla/chimera/BrowserWindowController.h b/mozilla/chimera/BrowserWindowController.h index 1174453044d..b1eb019dd1e 100644 --- a/mozilla/chimera/BrowserWindowController.h +++ b/mozilla/chimera/BrowserWindowController.h @@ -120,7 +120,8 @@ class nsIDOMNode; NSToolbarItem* mSidebarToolbarItem; BOOL mInitialized; - NSString* mURL; + NSString* mPendingURL; + NSString* mPendingReferrer; CHBrowserWrapper* mBrowserView; @@ -155,7 +156,7 @@ class nsIDOMNode; -(id)getTabBrowser; -(CHBrowserWrapper*)getBrowserWrapper; -- (void)loadURL:(NSString*)aURLSpec; +- (void)loadURL:(NSString*)aURLSpec referrer:(NSString*)aReferrer; - (void)updateLocationFields:(NSString *)locationString; - (void)updateToolbarItems; - (void)focusURLBar; @@ -209,9 +210,9 @@ class nsIDOMNode; -(void)enterModalSession; --(void)openNewWindowWithURL: (NSString*)aURLSpec loadInBackground: (BOOL)aLoadInBG; +-(void)openNewWindowWithURL: (NSString*)aURLSpec referrer:(NSString*)aReferrer loadInBackground: (BOOL)aLoadInBG; -(void)openNewWindowWithGroup: (nsIDOMElement*)aFolderElement loadInBackground: (BOOL)aLoadInBG; --(void)openNewTabWithURL: (NSString*)aURLSpec loadInBackground: (BOOL)aLoadInBG; +-(void)openNewTabWithURL: (NSString*)aURLSpec referrer: (NSString*)aReferrer loadInBackground: (BOOL)aLoadInBG; -(void)autosaveWindowFrame; -(void)disableAutosave; diff --git a/mozilla/chimera/BrowserWindowController.mm b/mozilla/chimera/BrowserWindowController.mm index 64443ecfa54..a51199ac397 100644 --- a/mozilla/chimera/BrowserWindowController.mm +++ b/mozilla/chimera/BrowserWindowController.mm @@ -273,12 +273,20 @@ static NSArray* sToolbarDefaults = nil; // We now remove the IB tab, then add one of our own. [mTabBrowser removeTabViewItem:[mTabBrowser tabViewItemAtIndex:0]]; - [self newTab:mShouldLoadHomePage]; - if (mURL) { + // create ourselves a new tab and fill it with the appropriate content. If we + // have a URL pending to be opened here, don't load anything in it, otherwise, + // load the homepage if that's what the user wants (or about:blank). + [self newTab:(!mPendingURL && mShouldLoadHomePage)]; + + // we have a url "pending" from the "open new window with link" command. Deal + // with it now that everything is loaded. + if (mPendingURL) { if (mShouldLoadHomePage) - [self loadURL: mURL]; - [mURL release]; + [self loadURL: mPendingURL referrer:mPendingReferrer]; + [mPendingURL release]; + [mPendingReferrer release]; + mPendingURL = mPendingReferrer = nil; } [mSidebarDrawer setDelegate: self]; @@ -332,7 +340,7 @@ static NSArray* sToolbarDefaults = nil; - (void)drawerDidOpen:(NSNotification *)aNotification { // XXXdwh This is temporary. - // [[mSidebarBrowserView getBrowserView] loadURI: @"http://tinderbox.mozilla.org/SeaMonkey/panel.html" flags:NSLoadFlagsNone]; + // [[mSidebarBrowserView getBrowserView] loadURI: @"http://tinderbox.mozilla.org/SeaMonkey/panel.html" referrer: nil flags:NSLoadFlagsNone]; // Toggle the sidebar icon. if(mSidebarToolbarItem) @@ -346,7 +354,7 @@ static NSArray* sToolbarDefaults = nil; [mSidebarToolbarItem setImage:[NSImage imageNamed:@"sidebarClosed"]]; // XXXdwh ignore for now. - // [[mSidebarBrowserView getBrowserView] loadURI: @"about:blank" flags:NSLoadFlagsNone]; + // [[mSidebarBrowserView getBrowserView] loadURI: @"about:blank" referrer:nil flags:NSLoadFlagsNone]; if (mDrawerCachedFrame) { mDrawerCachedFrame = NO; @@ -619,7 +627,7 @@ static NSArray* sToolbarDefaults = nil; { [mLocationSheetWindow orderOut:self]; [NSApp endSheet:mLocationSheetWindow returnCode:1]; - [self loadURL:[mLocationSheetURLField stringValue]]; + [self loadURL:[mLocationSheetURLField stringValue] referrer:nil]; // Focus and activate our content area. [[mBrowserView getBrowserView] setActive: YES]; @@ -668,7 +676,7 @@ static NSArray* sToolbarDefaults = nil; [newView setFrame: NSZeroRect]; [newView setIsBookmarksImport: YES]; [[[self window] contentView] addSubview: newView]; - [[newView getBrowserView] loadURI:aURLSpec flags:NSLoadFlagsNone]; + [[newView getBrowserView] loadURI:aURLSpec referrer: nil flags:NSLoadFlagsNone]; } - (IBAction)goToLocationFromToolbarURLField:(id)sender @@ -676,7 +684,7 @@ static NSArray* sToolbarDefaults = nil; // trim off any whitespace around url NSMutableString *theURL = [[NSMutableString alloc] initWithString:[sender stringValue]]; CFStringTrimWhitespace((CFMutableStringRef)theURL); - [self loadURL:theURL]; + [self loadURL:theURL referrer:nil]; [theURL release]; // Focus and activate our content area. @@ -703,7 +711,7 @@ static NSArray* sToolbarDefaults = nil; PRBool loadInBackground; nsCOMPtr pref(do_GetService("@mozilla.org/preferences-service;1")); pref->GetBoolPref("browser.tabs.loadInBackground", &loadInBackground); - [self openNewTabWithURL: viewSource loadInBackground: loadInBackground]; + [self openNewTabWithURL: viewSource referrer:nil loadInBackground: loadInBackground]; } - (void)printDocument @@ -729,7 +737,7 @@ static NSArray* sToolbarDefaults = nil; searchEngine = @"http://dmoz.org/"; } - [[mBrowserView getBrowserView] loadURI:searchEngine flags:NSLoadFlagsNone]; + [[mBrowserView getBrowserView] loadURI:searchEngine referrer: nil flags:NSLoadFlagsNone]; } @@ -771,7 +779,7 @@ static NSArray* sToolbarDefaults = nil; { NSString *pageToLoad = NSLocalizedStringFromTable(@"ThrobberPageDefault", @"WebsiteDefaults", nil); if (![pageToLoad isEqualToString:@"ThrobberPageDefault"]) - [self loadURL:pageToLoad]; + [self loadURL:pageToLoad referrer:nil]; } - (void)startThrobber @@ -859,7 +867,7 @@ static NSArray* sToolbarDefaults = nil; - (IBAction)home:(id)aSender { - [[mBrowserView getBrowserView] loadURI:[[CHPreferenceManager sharedInstance] homePage:NO] flags:NSLoadFlagsNone]; + [[mBrowserView getBrowserView] loadURI:[[CHPreferenceManager sharedInstance] homePage:NO] referrer: nil flags:NSLoadFlagsNone]; } - (IBAction)toggleSidebar:(id)aSender @@ -877,14 +885,18 @@ static NSArray* sToolbarDefaults = nil; [[self window] makeFirstResponder: resp]; } --(void)loadURL:(NSString*)aURLSpec +-(void)loadURL:(NSString*)aURLSpec referrer:(NSString*)aReferrer { if (mInitialized) { - [[mBrowserView getBrowserView] loadURI:aURLSpec flags:NSLoadFlagsNone]; + [[mBrowserView getBrowserView] loadURI:aURLSpec referrer:aReferrer flags:NSLoadFlagsNone]; } else { - mURL = aURLSpec; - [mURL retain]; + // we haven't yet initialized all the browser machinery, stash the url and referrer + // until we're ready in windowDidLoad: + mPendingURL = aURLSpec; + [mPendingURL retain]; + mPendingReferrer = aReferrer; + [mPendingReferrer retain]; } } @@ -923,7 +935,7 @@ static NSArray* sToolbarDefaults = nil; [mTabBrowser addTabViewItem: newTab]; if (allowHomepage) - [[newView getBrowserView] loadURI: ((newTabPage == 1) ? [[CHPreferenceManager sharedInstance] homePage: NO] : @"about:blank") flags:NSLoadFlagsNone]; + [[newView getBrowserView] loadURI: ((newTabPage == 1) ? [[CHPreferenceManager sharedInstance] homePage: NO] : @"about:blank") referrer:nil flags:NSLoadFlagsNone]; [mTabBrowser selectLastTabViewItem: self]; @@ -990,13 +1002,13 @@ static NSArray* sToolbarDefaults = nil; return mBrowserView; } --(void)openNewWindowWithURL: (NSString*)aURLSpec loadInBackground: (BOOL)aLoadInBG +-(void)openNewWindowWithURL: (NSString*)aURLSpec referrer: (NSString*)aReferrer loadInBackground: (BOOL)aLoadInBG { // Autosave our dimensions before we open a new window. That ensures the size ends up matching. [self autosaveWindowFrame]; BrowserWindowController* browser = [[BrowserWindowController alloc] initWithWindowNibName: @"BrowserWindow"]; - [browser loadURL: aURLSpec]; + [browser loadURL: aURLSpec referrer:aReferrer]; if (aLoadInBG) [[browser window] orderWindow: NSWindowBelow relativeTo: [[self window] windowNumber]]; else { @@ -1025,7 +1037,7 @@ static NSArray* sToolbarDefaults = nil; [mSidebarBookmarksDataSource openBookmarkGroup: tabBrowser groupElement: aFolderElement]; } --(void)openNewTabWithURL: (NSString*)aURLSpec loadInBackground: (BOOL)aLoadInBG +-(void)openNewTabWithURL: (NSString*)aURLSpec referrer:(NSString*)aReferrer loadInBackground: (BOOL)aLoadInBG { NSTabViewItem* newTab = [[[NSTabViewItem alloc] initWithIdentifier: nil] autorelease]; @@ -1039,7 +1051,7 @@ static NSArray* sToolbarDefaults = nil; [newTab setLabel: NSLocalizedString(@"TabLoading", @"")]; [newTab setView: newView]; - [[newView getBrowserView] loadURI:aURLSpec flags:NSLoadFlagsNone]; + [[newView getBrowserView] loadURI:aURLSpec referrer:aReferrer flags:NSLoadFlagsNone]; if (!aLoadInBG) { [mTabBrowser selectTabViewItem: newTab]; @@ -1257,10 +1269,12 @@ static NSArray* sToolbarDefaults = nil; PRBool loadInBackground; pref->GetBoolPref("browser.tabs.loadInBackground", &loadInBackground); + NSString* referrer = [[mBrowserView getBrowserView] getFocusedURLString]; + if (aUseWindow) - [self openNewWindowWithURL: hrefStr loadInBackground: loadInBackground]; + [self openNewWindowWithURL: hrefStr referrer:referrer loadInBackground: loadInBackground]; else - [self openNewTabWithURL: hrefStr loadInBackground: loadInBackground]; + [self openNewTabWithURL: hrefStr referrer:referrer loadInBackground: loadInBackground]; } - (IBAction)savePageAs:(id)aSender @@ -1330,8 +1344,9 @@ static NSArray* sToolbarDefaults = nil; imgElement->GetSrc(url); NSString* urlStr = [NSString stringWithCharacters: url.get() length:nsCRT::strlen(url.get())]; - - [self loadURL: urlStr]; + NSString* referrer = [[mBrowserView getBrowserView] getFocusedURLString]; + + [self loadURL: urlStr referrer:referrer]; // Focus and activate our content area. [[mBrowserView getBrowserView] setActive: YES]; diff --git a/mozilla/chimera/CHBookmarksButton.mm b/mozilla/chimera/CHBookmarksButton.mm index bb0f10b4139..5b2c696deb8 100644 --- a/mozilla/chimera/CHBookmarksButton.mm +++ b/mozilla/chimera/CHBookmarksButton.mm @@ -63,7 +63,7 @@ NSString* url = [NSString stringWithCString: cref.get()]; // Now load the URL in the window. - [[[self window] windowController] loadURL: url]; + [[[self window] windowController] loadURL: url referrer:nil]; // Focus and activate our content area. [[[[[self window] windowController] getBrowserWrapper] getBrowserView] setActive: YES]; diff --git a/mozilla/chimera/CHBrowserView.h b/mozilla/chimera/CHBrowserView.h index b4bdeb4b651..d40b341987e 100644 --- a/mozilla/chimera/CHBrowserView.h +++ b/mozilla/chimera/CHBrowserView.h @@ -126,7 +126,7 @@ enum { - (nsIDOMWindow*)getContentWindow; // nsIWebNavigation methods -- (void)loadURI:(NSString *)urlSpec flags:(unsigned int)flags; +- (void)loadURI:(NSString *)urlSpec referrer:(NSString*)referrer flags:(unsigned int)flags; - (void)reload:(unsigned int)flags; - (BOOL)canGoBack; - (BOOL)canGoForward; diff --git a/mozilla/chimera/CHBrowserView.mm b/mozilla/chimera/CHBrowserView.mm index b01a40e5b70..36fbbe8ae6d 100644 --- a/mozilla/chimera/CHBrowserView.mm +++ b/mozilla/chimera/CHBrowserView.mm @@ -1042,7 +1042,7 @@ nsHeaderSniffer::OnSecurityChange(nsIWebProgress *aWebProgress, nsIRequest *aReq return window; } -- (void)loadURI:(NSString *)urlSpec flags:(unsigned int)flags +- (void)loadURI:(NSString *)urlSpec referrer:(NSString*)referrer flags:(unsigned int)flags { nsCOMPtr nav = do_QueryInterface(_webBrowser); @@ -1051,6 +1051,9 @@ nsHeaderSniffer::OnSecurityChange(nsIWebProgress *aWebProgress, nsIRequest *aReq [urlSpec getCharacters:specStr]; specStr[length] = PRUnichar(0); + nsCOMPtr referrerURI; + if ( referrer ) + NS_NewURI(getter_AddRefs(referrerURI), [referrer cString]); PRUint32 navFlags = nsIWebNavigation::LOAD_FLAGS_NONE; if (flags & NSLoadFlagsDontPutInHistory) { @@ -1064,7 +1067,7 @@ nsHeaderSniffer::OnSecurityChange(nsIWebProgress *aWebProgress, nsIRequest *aReq nsIWebNavigation::LOAD_FLAGS_BYPASS_PROXY; } - nsresult rv = nav->LoadURI(specStr, navFlags, nsnull, nsnull, nsnull); + nsresult rv = nav->LoadURI(specStr, navFlags, referrerURI, nsnull, nsnull); if (NS_FAILED(rv)) { // XXX need to throw } diff --git a/mozilla/chimera/CHBrowserWrapper.mm b/mozilla/chimera/CHBrowserWrapper.mm index 22aab312e29..664f3122b57 100644 --- a/mozilla/chimera/CHBrowserWrapper.mm +++ b/mozilla/chimera/CHBrowserWrapper.mm @@ -85,7 +85,7 @@ static const char* ioServiceContractID = "@mozilla.org/network/io-service;1"; - (IBAction)load:(id)sender { - [mBrowserView loadURI:[urlbar stringValue] flags:NSLoadFlagsNone]; + [mBrowserView loadURI:[urlbar stringValue] referrer:nil flags:NSLoadFlagsNone]; } -(void)disconnectView diff --git a/mozilla/chimera/CHExtendedTabView.h b/mozilla/chimera/CHExtendedTabView.h index 912821cfbed..b314b08a065 100644 --- a/mozilla/chimera/CHExtendedTabView.h +++ b/mozilla/chimera/CHExtendedTabView.h @@ -30,6 +30,6 @@ - (BOOL)autoHides; - (void)setAutoHides:(BOOL)newSetting; --(void)addTabForURL:(NSString*)aURL; +-(void)addTabForURL:(NSString*)aURL referrer:(NSString*)aReferrer; @end diff --git a/mozilla/chimera/CHExtendedTabView.mm b/mozilla/chimera/CHExtendedTabView.mm index ec0e6ca7b73..49142dc7b0a 100644 --- a/mozilla/chimera/CHExtendedTabView.mm +++ b/mozilla/chimera/CHExtendedTabView.mm @@ -135,11 +135,11 @@ - (void)handleDropOnTab:(NSTabViewItem*)overTabViewItem overContent:(BOOL)overContentArea withURL:(NSString*)url { if (overTabViewItem) { - [[[overTabViewItem view] getBrowserView] loadURI: url flags: NSLoadFlagsNone]; + [[[overTabViewItem view] getBrowserView] loadURI: url referrer:nil flags: NSLoadFlagsNone]; } else if (overContentArea) { - [[[[self selectedTabViewItem] view] getBrowserView] loadURI: url flags: NSLoadFlagsNone]; + [[[[self selectedTabViewItem] view] getBrowserView] loadURI: url referrer:nil flags: NSLoadFlagsNone]; } else - [self addTabForURL:url]; + [self addTabForURL:url referrer:nil]; } // NSDraggingDestination /////////// @@ -222,7 +222,7 @@ return YES; } --(void)addTabForURL:(NSString*)aURL +-(void)addTabForURL:(NSString*)aURL referrer:(NSString*)aReferrer { NSTabViewItem* tabViewItem; CHBrowserWrapper* newView; @@ -234,7 +234,7 @@ [tabViewItem setView: newView]; [self addTabViewItem: tabViewItem]; - [[[tabViewItem view] getBrowserView] loadURI: aURL + [[[tabViewItem view] getBrowserView] loadURI: aURL referrer:aReferrer flags: NSLoadFlagsNone]; } diff --git a/mozilla/chimera/CHGetURLCommand.mm b/mozilla/chimera/CHGetURLCommand.mm index 42f80ddb57f..6c4558ea2fb 100644 --- a/mozilla/chimera/CHGetURLCommand.mm +++ b/mozilla/chimera/CHGetURLCommand.mm @@ -24,17 +24,13 @@ #import "CHGetURLCommand.h" #import -#import "BrowserWindowController.h" - -#include "nsIPref.h" -#include "nsCOMPtr.h" -#include "nsIServiceManagerUtils.h" +#import "MainController.h" @implementation CHGetURLCommand - (id)performDefaultImplementation { - [[NSApp delegate] openNewWindowOrTabWithURL:[self directParameter]]; + [(MainController*)[NSApp delegate] openNewWindowOrTabWithURL:[self directParameter] andReferrer:nil]; return nil; } diff --git a/mozilla/chimera/CHHistoryDataSource.mm b/mozilla/chimera/CHHistoryDataSource.mm index 3d1fe73fb67..19838398c89 100644 --- a/mozilla/chimera/CHHistoryDataSource.mm +++ b/mozilla/chimera/CHHistoryDataSource.mm @@ -148,7 +148,7 @@ valueLiteral->GetValue(getter_Copies(literalValue)); NSString* url = [NSString stringWithCharacters: literalValue.get() length: literalValue.Length()]; - [[[mBrowserWindowController getBrowserWrapper] getBrowserView] loadURI: url flags: NSLoadFlagsNone]; + [[[mBrowserWindowController getBrowserWrapper] getBrowserView] loadURI: url referrer: nil flags: NSLoadFlagsNone]; // Focus and activate our content area. [[[mBrowserWindowController getBrowserWrapper] getBrowserView] setActive: YES]; } diff --git a/mozilla/chimera/ContentClickListener.mm b/mozilla/chimera/ContentClickListener.mm index 2fa4f593978..de9cb17be25 100644 --- a/mozilla/chimera/ContentClickListener.mm +++ b/mozilla/chimera/ContentClickListener.mm @@ -300,12 +300,14 @@ ContentClickListener::MouseClick(nsIDOMEvent* aEvent) pref->GetBoolPref("browser.tabs.opentabfor.middleclick", &useTab); PRBool loadInBackground; pref->GetBoolPref("browser.tabs.loadInBackground", &loadInBackground); + NSString* referrer = [[[mBrowserController getBrowserWrapper] getBrowserView] getFocusedURLString]; + if (shiftKey) loadInBackground = !loadInBackground; if (useTab) - [mBrowserController openNewTabWithURL: hrefStr loadInBackground: loadInBackground]; + [mBrowserController openNewTabWithURL: hrefStr referrer:referrer loadInBackground: loadInBackground]; else - [mBrowserController openNewWindowWithURL: hrefStr loadInBackground: loadInBackground]; + [mBrowserController openNewWindowWithURL: hrefStr referrer:referrer loadInBackground: loadInBackground]; } else if (altKey) { // The user wants to save this link. diff --git a/mozilla/chimera/MainController.h b/mozilla/chimera/MainController.h index dd1eea59397..b6bbe4ef807 100644 --- a/mozilla/chimera/MainController.h +++ b/mozilla/chimera/MainController.h @@ -124,8 +124,8 @@ class BookmarksService; //Help menu actions -(IBAction) feedbackLink:(id)aSender; --(BrowserWindowController*)openBrowserWindowWithURL: (NSString*)aURL; -- (void)openNewWindowOrTabWithURL:(NSString*)inURLString; +-(BrowserWindowController*)openBrowserWindowWithURL: (NSString*)aURL andReferrer: (NSString*)aReferrer; +- (void)openNewWindowOrTabWithURL:(NSString*)inURLString andReferrer:(NSString*)aReferrer; - (void)adjustCloseWindowMenuItemKeyEquivalent:(BOOL)inHaveTabs; - (void)adjustCloseTabMenuItemKeyEquivalent:(BOOL)inHaveTabs; diff --git a/mozilla/chimera/MainController.mm b/mozilla/chimera/MainController.mm index cd37866e2c4..74fcc3a0aa2 100644 --- a/mozilla/chimera/MainController.mm +++ b/mozilla/chimera/MainController.mm @@ -160,7 +160,7 @@ static const char* ioServiceContractID = "@mozilla.org/network/io-service;1"; // Now open the new window. NSString* homePage = mStartURL ? mStartURL : [mPreferenceManager homePage:YES]; - BrowserWindowController* controller = [self openBrowserWindowWithURL:homePage]; + BrowserWindowController* controller = [self openBrowserWindowWithURL:homePage andReferrer:nil]; if ([homePage isEqualToString: @"about:blank"]) [controller focusURLBar]; @@ -215,11 +215,11 @@ static const char* ioServiceContractID = "@mozilla.org/network/io-service;1"; // ---------------------- NSWindow* mainWindow = [mApplication mainWindow]; if (mainWindow) { - [[mainWindow windowController] loadURL:[url absoluteString]]; + [[mainWindow windowController] loadURL:[url absoluteString] referrer:nil]; [[[[mainWindow windowController] getBrowserWrapper] getBrowserView] setActive: YES]; } else - [self openBrowserWindowWithURL:[url absoluteString]]; + [self openBrowserWindowWithURL:[url absoluteString] andReferrer:nil]; } } @@ -227,7 +227,7 @@ static const char* ioServiceContractID = "@mozilla.org/network/io-service;1"; { NSWindow* mainWindow = [mApplication mainWindow]; if (!mainWindow) { - [self openBrowserWindowWithURL: @"about:blank"]; + [self openBrowserWindowWithURL: @"about:blank" andReferrer:nil]; mainWindow = [mApplication mainWindow]; } @@ -357,16 +357,16 @@ static const char* ioServiceContractID = "@mozilla.org/network/io-service;1"; } // open a new URL. This method always makes a new browser window --(BrowserWindowController*)openBrowserWindowWithURL: (NSString*)aURL +-(BrowserWindowController*)openBrowserWindowWithURL: (NSString*)aURL andReferrer: (NSString*)aReferrer { BrowserWindowController* browser = [[BrowserWindowController alloc] initWithWindowNibName: @"BrowserWindow"]; - [browser loadURL: aURL]; + [browser loadURL: aURL referrer:aReferrer]; [browser showWindow: self]; return browser; } // open a new URL, observing the prefs on how to behave -- (void)openNewWindowOrTabWithURL:(NSString*)inURLString +- (void)openNewWindowOrTabWithURL:(NSString*)inURLString andReferrer: (NSString*)aReferrer { // make sure we're initted [self preferenceManager]; @@ -388,12 +388,12 @@ static const char* ioServiceContractID = "@mozilla.org/network/io-service;1"; NSWindow* browserWindow = [self getFrontmostBrowserWindow]; if (reuseWindow && browserWindow) { controller = [browserWindow windowController]; - [controller openNewTabWithURL:inURLString loadInBackground:loadInBackground]; + [controller openNewTabWithURL:inURLString referrer:aReferrer loadInBackground:loadInBackground]; } else { // should use BrowserWindowController openNewWindowWithURL, but that method // really needs to be on the MainController - controller = [self openBrowserWindowWithURL: inURLString]; + controller = [self openBrowserWindowWithURL: inURLString andReferrer:aReferrer]; } [[[controller getBrowserWrapper] getBrowserView] setActive: YES]; @@ -472,7 +472,7 @@ static const char* ioServiceContractID = "@mozilla.org/network/io-service;1"; { NSWindow* mainWind = [mApplication mainWindow]; if (!mainWind) { - [self openBrowserWindowWithURL: @"about:blank"]; + [self openBrowserWindowWithURL: @"about:blank" andReferrer:nil]; mainWind = [mApplication mainWindow]; } @@ -483,7 +483,7 @@ static const char* ioServiceContractID = "@mozilla.org/network/io-service;1"; { NSWindow* mainWindow = [mApplication mainWindow]; if (!mainWindow) { - [self openBrowserWindowWithURL: @"about:blank"]; + [self openBrowserWindowWithURL: @"about:blank" andReferrer:nil]; mainWindow = [mApplication mainWindow]; } @@ -531,7 +531,7 @@ static const char* ioServiceContractID = "@mozilla.org/network/io-service;1"; [self openBrowserWindowWithURL:[[NSURL fileURLWithPath:filename] absoluteString]]; } */ - [self openNewWindowOrTabWithURL:[[NSURL fileURLWithPath:filename] absoluteString]]; + [self openNewWindowOrTabWithURL:[[NSURL fileURLWithPath:filename] absoluteString] andReferrer:nil]; return YES; } @@ -677,7 +677,7 @@ static const char* ioServiceContractID = "@mozilla.org/network/io-service;1"; { NSWindow* mainWindow = [mApplication mainWindow]; if (!mainWindow) { - [self openBrowserWindowWithURL: @"about:blank"]; + [self openBrowserWindowWithURL: @"about:blank" andReferrer:nil]; mainWindow = [mApplication mainWindow]; } @@ -695,7 +695,7 @@ static const char* ioServiceContractID = "@mozilla.org/network/io-service;1"; { NSString *pageToLoad = NSLocalizedStringFromTable(@"FeedbackPageDefault", @"WebsiteDefaults", nil); if (![pageToLoad isEqualToString:@"FeedbackPageDefault"]) - [self openNewWindowOrTabWithURL:pageToLoad]; + [self openNewWindowOrTabWithURL:pageToLoad andReferrer:nil]; } + (NSImage*)createImageForDragging:(NSImage*)aIcon title:(NSString*)aTitle @@ -809,7 +809,7 @@ static const char* ioServiceContractID = "@mozilla.org/network/io-service;1"; [urlString appendString:tmpString]; } - [self openBrowserWindowWithURL:urlString]; + [self openBrowserWindowWithURL:urlString andReferrer:nil]; } @end diff --git a/mozilla/chimera/src/appleevents/GetURLCommand.mm b/mozilla/chimera/src/appleevents/GetURLCommand.mm index 42f80ddb57f..6c4558ea2fb 100644 --- a/mozilla/chimera/src/appleevents/GetURLCommand.mm +++ b/mozilla/chimera/src/appleevents/GetURLCommand.mm @@ -24,17 +24,13 @@ #import "CHGetURLCommand.h" #import -#import "BrowserWindowController.h" - -#include "nsIPref.h" -#include "nsCOMPtr.h" -#include "nsIServiceManagerUtils.h" +#import "MainController.h" @implementation CHGetURLCommand - (id)performDefaultImplementation { - [[NSApp delegate] openNewWindowOrTabWithURL:[self directParameter]]; + [(MainController*)[NSApp delegate] openNewWindowOrTabWithURL:[self directParameter] andReferrer:nil]; return nil; } diff --git a/mozilla/chimera/src/application/MainController.h b/mozilla/chimera/src/application/MainController.h index dd1eea59397..b6bbe4ef807 100644 --- a/mozilla/chimera/src/application/MainController.h +++ b/mozilla/chimera/src/application/MainController.h @@ -124,8 +124,8 @@ class BookmarksService; //Help menu actions -(IBAction) feedbackLink:(id)aSender; --(BrowserWindowController*)openBrowserWindowWithURL: (NSString*)aURL; -- (void)openNewWindowOrTabWithURL:(NSString*)inURLString; +-(BrowserWindowController*)openBrowserWindowWithURL: (NSString*)aURL andReferrer: (NSString*)aReferrer; +- (void)openNewWindowOrTabWithURL:(NSString*)inURLString andReferrer:(NSString*)aReferrer; - (void)adjustCloseWindowMenuItemKeyEquivalent:(BOOL)inHaveTabs; - (void)adjustCloseTabMenuItemKeyEquivalent:(BOOL)inHaveTabs; diff --git a/mozilla/chimera/src/application/MainController.mm b/mozilla/chimera/src/application/MainController.mm index cd37866e2c4..74fcc3a0aa2 100644 --- a/mozilla/chimera/src/application/MainController.mm +++ b/mozilla/chimera/src/application/MainController.mm @@ -160,7 +160,7 @@ static const char* ioServiceContractID = "@mozilla.org/network/io-service;1"; // Now open the new window. NSString* homePage = mStartURL ? mStartURL : [mPreferenceManager homePage:YES]; - BrowserWindowController* controller = [self openBrowserWindowWithURL:homePage]; + BrowserWindowController* controller = [self openBrowserWindowWithURL:homePage andReferrer:nil]; if ([homePage isEqualToString: @"about:blank"]) [controller focusURLBar]; @@ -215,11 +215,11 @@ static const char* ioServiceContractID = "@mozilla.org/network/io-service;1"; // ---------------------- NSWindow* mainWindow = [mApplication mainWindow]; if (mainWindow) { - [[mainWindow windowController] loadURL:[url absoluteString]]; + [[mainWindow windowController] loadURL:[url absoluteString] referrer:nil]; [[[[mainWindow windowController] getBrowserWrapper] getBrowserView] setActive: YES]; } else - [self openBrowserWindowWithURL:[url absoluteString]]; + [self openBrowserWindowWithURL:[url absoluteString] andReferrer:nil]; } } @@ -227,7 +227,7 @@ static const char* ioServiceContractID = "@mozilla.org/network/io-service;1"; { NSWindow* mainWindow = [mApplication mainWindow]; if (!mainWindow) { - [self openBrowserWindowWithURL: @"about:blank"]; + [self openBrowserWindowWithURL: @"about:blank" andReferrer:nil]; mainWindow = [mApplication mainWindow]; } @@ -357,16 +357,16 @@ static const char* ioServiceContractID = "@mozilla.org/network/io-service;1"; } // open a new URL. This method always makes a new browser window --(BrowserWindowController*)openBrowserWindowWithURL: (NSString*)aURL +-(BrowserWindowController*)openBrowserWindowWithURL: (NSString*)aURL andReferrer: (NSString*)aReferrer { BrowserWindowController* browser = [[BrowserWindowController alloc] initWithWindowNibName: @"BrowserWindow"]; - [browser loadURL: aURL]; + [browser loadURL: aURL referrer:aReferrer]; [browser showWindow: self]; return browser; } // open a new URL, observing the prefs on how to behave -- (void)openNewWindowOrTabWithURL:(NSString*)inURLString +- (void)openNewWindowOrTabWithURL:(NSString*)inURLString andReferrer: (NSString*)aReferrer { // make sure we're initted [self preferenceManager]; @@ -388,12 +388,12 @@ static const char* ioServiceContractID = "@mozilla.org/network/io-service;1"; NSWindow* browserWindow = [self getFrontmostBrowserWindow]; if (reuseWindow && browserWindow) { controller = [browserWindow windowController]; - [controller openNewTabWithURL:inURLString loadInBackground:loadInBackground]; + [controller openNewTabWithURL:inURLString referrer:aReferrer loadInBackground:loadInBackground]; } else { // should use BrowserWindowController openNewWindowWithURL, but that method // really needs to be on the MainController - controller = [self openBrowserWindowWithURL: inURLString]; + controller = [self openBrowserWindowWithURL: inURLString andReferrer:aReferrer]; } [[[controller getBrowserWrapper] getBrowserView] setActive: YES]; @@ -472,7 +472,7 @@ static const char* ioServiceContractID = "@mozilla.org/network/io-service;1"; { NSWindow* mainWind = [mApplication mainWindow]; if (!mainWind) { - [self openBrowserWindowWithURL: @"about:blank"]; + [self openBrowserWindowWithURL: @"about:blank" andReferrer:nil]; mainWind = [mApplication mainWindow]; } @@ -483,7 +483,7 @@ static const char* ioServiceContractID = "@mozilla.org/network/io-service;1"; { NSWindow* mainWindow = [mApplication mainWindow]; if (!mainWindow) { - [self openBrowserWindowWithURL: @"about:blank"]; + [self openBrowserWindowWithURL: @"about:blank" andReferrer:nil]; mainWindow = [mApplication mainWindow]; } @@ -531,7 +531,7 @@ static const char* ioServiceContractID = "@mozilla.org/network/io-service;1"; [self openBrowserWindowWithURL:[[NSURL fileURLWithPath:filename] absoluteString]]; } */ - [self openNewWindowOrTabWithURL:[[NSURL fileURLWithPath:filename] absoluteString]]; + [self openNewWindowOrTabWithURL:[[NSURL fileURLWithPath:filename] absoluteString] andReferrer:nil]; return YES; } @@ -677,7 +677,7 @@ static const char* ioServiceContractID = "@mozilla.org/network/io-service;1"; { NSWindow* mainWindow = [mApplication mainWindow]; if (!mainWindow) { - [self openBrowserWindowWithURL: @"about:blank"]; + [self openBrowserWindowWithURL: @"about:blank" andReferrer:nil]; mainWindow = [mApplication mainWindow]; } @@ -695,7 +695,7 @@ static const char* ioServiceContractID = "@mozilla.org/network/io-service;1"; { NSString *pageToLoad = NSLocalizedStringFromTable(@"FeedbackPageDefault", @"WebsiteDefaults", nil); if (![pageToLoad isEqualToString:@"FeedbackPageDefault"]) - [self openNewWindowOrTabWithURL:pageToLoad]; + [self openNewWindowOrTabWithURL:pageToLoad andReferrer:nil]; } + (NSImage*)createImageForDragging:(NSImage*)aIcon title:(NSString*)aTitle @@ -809,7 +809,7 @@ static const char* ioServiceContractID = "@mozilla.org/network/io-service;1"; [urlString appendString:tmpString]; } - [self openBrowserWindowWithURL:urlString]; + [self openBrowserWindowWithURL:urlString andReferrer:nil]; } @end diff --git a/mozilla/chimera/src/bookmarks/BookmarksButton.mm b/mozilla/chimera/src/bookmarks/BookmarksButton.mm index bb0f10b4139..5b2c696deb8 100644 --- a/mozilla/chimera/src/bookmarks/BookmarksButton.mm +++ b/mozilla/chimera/src/bookmarks/BookmarksButton.mm @@ -63,7 +63,7 @@ NSString* url = [NSString stringWithCString: cref.get()]; // Now load the URL in the window. - [[[self window] windowController] loadURL: url]; + [[[self window] windowController] loadURL: url referrer:nil]; // Focus and activate our content area. [[[[[self window] windowController] getBrowserWrapper] getBrowserView] setActive: YES]; diff --git a/mozilla/chimera/src/bookmarks/BookmarksDataSource.mm b/mozilla/chimera/src/bookmarks/BookmarksDataSource.mm index 47b1462cd75..473371e5f18 100644 --- a/mozilla/chimera/src/bookmarks/BookmarksDataSource.mm +++ b/mozilla/chimera/src/bookmarks/BookmarksDataSource.mm @@ -396,7 +396,7 @@ content->GetAttr(kNameSpaceID_None, BookmarksService::gHrefAtom, href); if (!href.IsEmpty()) { NSString* url = [NSString stringWithCharacters: href.get() length: href.Length()]; - [[[mBrowserWindowController getBrowserWrapper] getBrowserView] loadURI: url flags: NSLoadFlagsNone]; + [[[mBrowserWindowController getBrowserWrapper] getBrowserView] loadURI: url referrer:nil flags: NSLoadFlagsNone]; // Focus and activate our content area. [[[mBrowserWindowController getBrowserWrapper] getBrowserView] setActive: YES]; } @@ -682,7 +682,7 @@ PRBool loadInBackground; pref->GetBoolPref("browser.tabs.loadInBackground", &loadInBackground); - [mBrowserWindowController openNewTabWithURL: hrefStr loadInBackground: loadInBackground]; + [mBrowserWindowController openNewTabWithURL: hrefStr referrer:nil loadInBackground: loadInBackground]; } } @@ -702,7 +702,7 @@ nsAutoString group; [item contentNode]->GetAttr(kNameSpaceID_None, BookmarksService::gGroupAtom, group); if (group.IsEmpty()) - [mBrowserWindowController openNewWindowWithURL: hrefStr loadInBackground: NO]; + [mBrowserWindowController openNewWindowWithURL: hrefStr referrer: nil loadInBackground: NO]; else { nsCOMPtr elt(do_QueryInterface([item contentNode])); [mBrowserWindowController openNewWindowWithGroup: elt loadInBackground: NO]; diff --git a/mozilla/chimera/src/bookmarks/BookmarksService.mm b/mozilla/chimera/src/bookmarks/BookmarksService.mm index 3ed2528a0d3..d4c6159f850 100644 --- a/mozilla/chimera/src/bookmarks/BookmarksService.mm +++ b/mozilla/chimera/src/bookmarks/BookmarksService.mm @@ -786,7 +786,7 @@ BookmarksService::OpenMenuBookmark(BrowserWindowController* aController, id aMen NSString* url = [NSString stringWithCharacters: href.get() length: href.Length()]; // Now load the URL in the window. - [aController loadURL:url]; + [aController loadURL:url referrer:nil]; // Focus and activate our content area. [[[aController getBrowserWrapper] getBrowserView] setActive: YES]; @@ -1013,7 +1013,7 @@ BookmarksService::OpenBookmarkGroup(id aTabView, nsIDOMElement* aFolder) else tabViewItem = [aTabView tabViewItemAtIndex: currentIndex]; - [[[tabViewItem view] getBrowserView] loadURI: url + [[[tabViewItem view] getBrowserView] loadURI: url referrer:nil flags: NSLoadFlagsNone]; } } diff --git a/mozilla/chimera/src/browser/BrowserWindowController.h b/mozilla/chimera/src/browser/BrowserWindowController.h index 1174453044d..b1eb019dd1e 100644 --- a/mozilla/chimera/src/browser/BrowserWindowController.h +++ b/mozilla/chimera/src/browser/BrowserWindowController.h @@ -120,7 +120,8 @@ class nsIDOMNode; NSToolbarItem* mSidebarToolbarItem; BOOL mInitialized; - NSString* mURL; + NSString* mPendingURL; + NSString* mPendingReferrer; CHBrowserWrapper* mBrowserView; @@ -155,7 +156,7 @@ class nsIDOMNode; -(id)getTabBrowser; -(CHBrowserWrapper*)getBrowserWrapper; -- (void)loadURL:(NSString*)aURLSpec; +- (void)loadURL:(NSString*)aURLSpec referrer:(NSString*)aReferrer; - (void)updateLocationFields:(NSString *)locationString; - (void)updateToolbarItems; - (void)focusURLBar; @@ -209,9 +210,9 @@ class nsIDOMNode; -(void)enterModalSession; --(void)openNewWindowWithURL: (NSString*)aURLSpec loadInBackground: (BOOL)aLoadInBG; +-(void)openNewWindowWithURL: (NSString*)aURLSpec referrer:(NSString*)aReferrer loadInBackground: (BOOL)aLoadInBG; -(void)openNewWindowWithGroup: (nsIDOMElement*)aFolderElement loadInBackground: (BOOL)aLoadInBG; --(void)openNewTabWithURL: (NSString*)aURLSpec loadInBackground: (BOOL)aLoadInBG; +-(void)openNewTabWithURL: (NSString*)aURLSpec referrer: (NSString*)aReferrer loadInBackground: (BOOL)aLoadInBG; -(void)autosaveWindowFrame; -(void)disableAutosave; diff --git a/mozilla/chimera/src/browser/BrowserWindowController.mm b/mozilla/chimera/src/browser/BrowserWindowController.mm index 64443ecfa54..a51199ac397 100644 --- a/mozilla/chimera/src/browser/BrowserWindowController.mm +++ b/mozilla/chimera/src/browser/BrowserWindowController.mm @@ -273,12 +273,20 @@ static NSArray* sToolbarDefaults = nil; // We now remove the IB tab, then add one of our own. [mTabBrowser removeTabViewItem:[mTabBrowser tabViewItemAtIndex:0]]; - [self newTab:mShouldLoadHomePage]; - if (mURL) { + // create ourselves a new tab and fill it with the appropriate content. If we + // have a URL pending to be opened here, don't load anything in it, otherwise, + // load the homepage if that's what the user wants (or about:blank). + [self newTab:(!mPendingURL && mShouldLoadHomePage)]; + + // we have a url "pending" from the "open new window with link" command. Deal + // with it now that everything is loaded. + if (mPendingURL) { if (mShouldLoadHomePage) - [self loadURL: mURL]; - [mURL release]; + [self loadURL: mPendingURL referrer:mPendingReferrer]; + [mPendingURL release]; + [mPendingReferrer release]; + mPendingURL = mPendingReferrer = nil; } [mSidebarDrawer setDelegate: self]; @@ -332,7 +340,7 @@ static NSArray* sToolbarDefaults = nil; - (void)drawerDidOpen:(NSNotification *)aNotification { // XXXdwh This is temporary. - // [[mSidebarBrowserView getBrowserView] loadURI: @"http://tinderbox.mozilla.org/SeaMonkey/panel.html" flags:NSLoadFlagsNone]; + // [[mSidebarBrowserView getBrowserView] loadURI: @"http://tinderbox.mozilla.org/SeaMonkey/panel.html" referrer: nil flags:NSLoadFlagsNone]; // Toggle the sidebar icon. if(mSidebarToolbarItem) @@ -346,7 +354,7 @@ static NSArray* sToolbarDefaults = nil; [mSidebarToolbarItem setImage:[NSImage imageNamed:@"sidebarClosed"]]; // XXXdwh ignore for now. - // [[mSidebarBrowserView getBrowserView] loadURI: @"about:blank" flags:NSLoadFlagsNone]; + // [[mSidebarBrowserView getBrowserView] loadURI: @"about:blank" referrer:nil flags:NSLoadFlagsNone]; if (mDrawerCachedFrame) { mDrawerCachedFrame = NO; @@ -619,7 +627,7 @@ static NSArray* sToolbarDefaults = nil; { [mLocationSheetWindow orderOut:self]; [NSApp endSheet:mLocationSheetWindow returnCode:1]; - [self loadURL:[mLocationSheetURLField stringValue]]; + [self loadURL:[mLocationSheetURLField stringValue] referrer:nil]; // Focus and activate our content area. [[mBrowserView getBrowserView] setActive: YES]; @@ -668,7 +676,7 @@ static NSArray* sToolbarDefaults = nil; [newView setFrame: NSZeroRect]; [newView setIsBookmarksImport: YES]; [[[self window] contentView] addSubview: newView]; - [[newView getBrowserView] loadURI:aURLSpec flags:NSLoadFlagsNone]; + [[newView getBrowserView] loadURI:aURLSpec referrer: nil flags:NSLoadFlagsNone]; } - (IBAction)goToLocationFromToolbarURLField:(id)sender @@ -676,7 +684,7 @@ static NSArray* sToolbarDefaults = nil; // trim off any whitespace around url NSMutableString *theURL = [[NSMutableString alloc] initWithString:[sender stringValue]]; CFStringTrimWhitespace((CFMutableStringRef)theURL); - [self loadURL:theURL]; + [self loadURL:theURL referrer:nil]; [theURL release]; // Focus and activate our content area. @@ -703,7 +711,7 @@ static NSArray* sToolbarDefaults = nil; PRBool loadInBackground; nsCOMPtr pref(do_GetService("@mozilla.org/preferences-service;1")); pref->GetBoolPref("browser.tabs.loadInBackground", &loadInBackground); - [self openNewTabWithURL: viewSource loadInBackground: loadInBackground]; + [self openNewTabWithURL: viewSource referrer:nil loadInBackground: loadInBackground]; } - (void)printDocument @@ -729,7 +737,7 @@ static NSArray* sToolbarDefaults = nil; searchEngine = @"http://dmoz.org/"; } - [[mBrowserView getBrowserView] loadURI:searchEngine flags:NSLoadFlagsNone]; + [[mBrowserView getBrowserView] loadURI:searchEngine referrer: nil flags:NSLoadFlagsNone]; } @@ -771,7 +779,7 @@ static NSArray* sToolbarDefaults = nil; { NSString *pageToLoad = NSLocalizedStringFromTable(@"ThrobberPageDefault", @"WebsiteDefaults", nil); if (![pageToLoad isEqualToString:@"ThrobberPageDefault"]) - [self loadURL:pageToLoad]; + [self loadURL:pageToLoad referrer:nil]; } - (void)startThrobber @@ -859,7 +867,7 @@ static NSArray* sToolbarDefaults = nil; - (IBAction)home:(id)aSender { - [[mBrowserView getBrowserView] loadURI:[[CHPreferenceManager sharedInstance] homePage:NO] flags:NSLoadFlagsNone]; + [[mBrowserView getBrowserView] loadURI:[[CHPreferenceManager sharedInstance] homePage:NO] referrer: nil flags:NSLoadFlagsNone]; } - (IBAction)toggleSidebar:(id)aSender @@ -877,14 +885,18 @@ static NSArray* sToolbarDefaults = nil; [[self window] makeFirstResponder: resp]; } --(void)loadURL:(NSString*)aURLSpec +-(void)loadURL:(NSString*)aURLSpec referrer:(NSString*)aReferrer { if (mInitialized) { - [[mBrowserView getBrowserView] loadURI:aURLSpec flags:NSLoadFlagsNone]; + [[mBrowserView getBrowserView] loadURI:aURLSpec referrer:aReferrer flags:NSLoadFlagsNone]; } else { - mURL = aURLSpec; - [mURL retain]; + // we haven't yet initialized all the browser machinery, stash the url and referrer + // until we're ready in windowDidLoad: + mPendingURL = aURLSpec; + [mPendingURL retain]; + mPendingReferrer = aReferrer; + [mPendingReferrer retain]; } } @@ -923,7 +935,7 @@ static NSArray* sToolbarDefaults = nil; [mTabBrowser addTabViewItem: newTab]; if (allowHomepage) - [[newView getBrowserView] loadURI: ((newTabPage == 1) ? [[CHPreferenceManager sharedInstance] homePage: NO] : @"about:blank") flags:NSLoadFlagsNone]; + [[newView getBrowserView] loadURI: ((newTabPage == 1) ? [[CHPreferenceManager sharedInstance] homePage: NO] : @"about:blank") referrer:nil flags:NSLoadFlagsNone]; [mTabBrowser selectLastTabViewItem: self]; @@ -990,13 +1002,13 @@ static NSArray* sToolbarDefaults = nil; return mBrowserView; } --(void)openNewWindowWithURL: (NSString*)aURLSpec loadInBackground: (BOOL)aLoadInBG +-(void)openNewWindowWithURL: (NSString*)aURLSpec referrer: (NSString*)aReferrer loadInBackground: (BOOL)aLoadInBG { // Autosave our dimensions before we open a new window. That ensures the size ends up matching. [self autosaveWindowFrame]; BrowserWindowController* browser = [[BrowserWindowController alloc] initWithWindowNibName: @"BrowserWindow"]; - [browser loadURL: aURLSpec]; + [browser loadURL: aURLSpec referrer:aReferrer]; if (aLoadInBG) [[browser window] orderWindow: NSWindowBelow relativeTo: [[self window] windowNumber]]; else { @@ -1025,7 +1037,7 @@ static NSArray* sToolbarDefaults = nil; [mSidebarBookmarksDataSource openBookmarkGroup: tabBrowser groupElement: aFolderElement]; } --(void)openNewTabWithURL: (NSString*)aURLSpec loadInBackground: (BOOL)aLoadInBG +-(void)openNewTabWithURL: (NSString*)aURLSpec referrer:(NSString*)aReferrer loadInBackground: (BOOL)aLoadInBG { NSTabViewItem* newTab = [[[NSTabViewItem alloc] initWithIdentifier: nil] autorelease]; @@ -1039,7 +1051,7 @@ static NSArray* sToolbarDefaults = nil; [newTab setLabel: NSLocalizedString(@"TabLoading", @"")]; [newTab setView: newView]; - [[newView getBrowserView] loadURI:aURLSpec flags:NSLoadFlagsNone]; + [[newView getBrowserView] loadURI:aURLSpec referrer:aReferrer flags:NSLoadFlagsNone]; if (!aLoadInBG) { [mTabBrowser selectTabViewItem: newTab]; @@ -1257,10 +1269,12 @@ static NSArray* sToolbarDefaults = nil; PRBool loadInBackground; pref->GetBoolPref("browser.tabs.loadInBackground", &loadInBackground); + NSString* referrer = [[mBrowserView getBrowserView] getFocusedURLString]; + if (aUseWindow) - [self openNewWindowWithURL: hrefStr loadInBackground: loadInBackground]; + [self openNewWindowWithURL: hrefStr referrer:referrer loadInBackground: loadInBackground]; else - [self openNewTabWithURL: hrefStr loadInBackground: loadInBackground]; + [self openNewTabWithURL: hrefStr referrer:referrer loadInBackground: loadInBackground]; } - (IBAction)savePageAs:(id)aSender @@ -1330,8 +1344,9 @@ static NSArray* sToolbarDefaults = nil; imgElement->GetSrc(url); NSString* urlStr = [NSString stringWithCharacters: url.get() length:nsCRT::strlen(url.get())]; - - [self loadURL: urlStr]; + NSString* referrer = [[mBrowserView getBrowserView] getFocusedURLString]; + + [self loadURL: urlStr referrer:referrer]; // Focus and activate our content area. [[mBrowserView getBrowserView] setActive: YES]; diff --git a/mozilla/chimera/src/browser/BrowserWrapper.mm b/mozilla/chimera/src/browser/BrowserWrapper.mm index 22aab312e29..664f3122b57 100644 --- a/mozilla/chimera/src/browser/BrowserWrapper.mm +++ b/mozilla/chimera/src/browser/BrowserWrapper.mm @@ -85,7 +85,7 @@ static const char* ioServiceContractID = "@mozilla.org/network/io-service;1"; - (IBAction)load:(id)sender { - [mBrowserView loadURI:[urlbar stringValue] flags:NSLoadFlagsNone]; + [mBrowserView loadURI:[urlbar stringValue] referrer:nil flags:NSLoadFlagsNone]; } -(void)disconnectView diff --git a/mozilla/chimera/src/browser/ContentClickListener.mm b/mozilla/chimera/src/browser/ContentClickListener.mm index 2fa4f593978..de9cb17be25 100644 --- a/mozilla/chimera/src/browser/ContentClickListener.mm +++ b/mozilla/chimera/src/browser/ContentClickListener.mm @@ -300,12 +300,14 @@ ContentClickListener::MouseClick(nsIDOMEvent* aEvent) pref->GetBoolPref("browser.tabs.opentabfor.middleclick", &useTab); PRBool loadInBackground; pref->GetBoolPref("browser.tabs.loadInBackground", &loadInBackground); + NSString* referrer = [[[mBrowserController getBrowserWrapper] getBrowserView] getFocusedURLString]; + if (shiftKey) loadInBackground = !loadInBackground; if (useTab) - [mBrowserController openNewTabWithURL: hrefStr loadInBackground: loadInBackground]; + [mBrowserController openNewTabWithURL: hrefStr referrer:referrer loadInBackground: loadInBackground]; else - [mBrowserController openNewWindowWithURL: hrefStr loadInBackground: loadInBackground]; + [mBrowserController openNewWindowWithURL: hrefStr referrer:referrer loadInBackground: loadInBackground]; } else if (altKey) { // The user wants to save this link. diff --git a/mozilla/chimera/src/embedding/CHBrowserView.h b/mozilla/chimera/src/embedding/CHBrowserView.h index b4bdeb4b651..d40b341987e 100644 --- a/mozilla/chimera/src/embedding/CHBrowserView.h +++ b/mozilla/chimera/src/embedding/CHBrowserView.h @@ -126,7 +126,7 @@ enum { - (nsIDOMWindow*)getContentWindow; // nsIWebNavigation methods -- (void)loadURI:(NSString *)urlSpec flags:(unsigned int)flags; +- (void)loadURI:(NSString *)urlSpec referrer:(NSString*)referrer flags:(unsigned int)flags; - (void)reload:(unsigned int)flags; - (BOOL)canGoBack; - (BOOL)canGoForward; diff --git a/mozilla/chimera/src/embedding/CHBrowserView.mm b/mozilla/chimera/src/embedding/CHBrowserView.mm index b01a40e5b70..36fbbe8ae6d 100644 --- a/mozilla/chimera/src/embedding/CHBrowserView.mm +++ b/mozilla/chimera/src/embedding/CHBrowserView.mm @@ -1042,7 +1042,7 @@ nsHeaderSniffer::OnSecurityChange(nsIWebProgress *aWebProgress, nsIRequest *aReq return window; } -- (void)loadURI:(NSString *)urlSpec flags:(unsigned int)flags +- (void)loadURI:(NSString *)urlSpec referrer:(NSString*)referrer flags:(unsigned int)flags { nsCOMPtr nav = do_QueryInterface(_webBrowser); @@ -1051,6 +1051,9 @@ nsHeaderSniffer::OnSecurityChange(nsIWebProgress *aWebProgress, nsIRequest *aReq [urlSpec getCharacters:specStr]; specStr[length] = PRUnichar(0); + nsCOMPtr referrerURI; + if ( referrer ) + NS_NewURI(getter_AddRefs(referrerURI), [referrer cString]); PRUint32 navFlags = nsIWebNavigation::LOAD_FLAGS_NONE; if (flags & NSLoadFlagsDontPutInHistory) { @@ -1064,7 +1067,7 @@ nsHeaderSniffer::OnSecurityChange(nsIWebProgress *aWebProgress, nsIRequest *aReq nsIWebNavigation::LOAD_FLAGS_BYPASS_PROXY; } - nsresult rv = nav->LoadURI(specStr, navFlags, nsnull, nsnull, nsnull); + nsresult rv = nav->LoadURI(specStr, navFlags, referrerURI, nsnull, nsnull); if (NS_FAILED(rv)) { // XXX need to throw } diff --git a/mozilla/chimera/src/history/HistoryDataSource.mm b/mozilla/chimera/src/history/HistoryDataSource.mm index 3d1fe73fb67..19838398c89 100644 --- a/mozilla/chimera/src/history/HistoryDataSource.mm +++ b/mozilla/chimera/src/history/HistoryDataSource.mm @@ -148,7 +148,7 @@ valueLiteral->GetValue(getter_Copies(literalValue)); NSString* url = [NSString stringWithCharacters: literalValue.get() length: literalValue.Length()]; - [[[mBrowserWindowController getBrowserWrapper] getBrowserView] loadURI: url flags: NSLoadFlagsNone]; + [[[mBrowserWindowController getBrowserWrapper] getBrowserView] loadURI: url referrer: nil flags: NSLoadFlagsNone]; // Focus and activate our content area. [[[mBrowserWindowController getBrowserWrapper] getBrowserView] setActive: YES]; }