don't reload the page when asking for view-source. use the cached version

if we have one (bug 153884)
This commit is contained in:
pinkerton%aol.net 2004-01-05 23:28:37 +00:00
Родитель f17ff2192d
Коммит d1d245f091
3 изменённых файлов: 95 добавлений и 23 удалений

Просмотреть файл

@ -84,6 +84,7 @@
#include "nsIURIFixup.h"
#include "nsIBrowserHistory.h"
#include "nsIPermissionManager.h"
#include "nsIWebPageDescriptor.h"
#include <QuickTime/QuickTime.h>
@ -231,11 +232,18 @@ static NSArray* sToolbarDefaults = nil;
#pragma mark -
@interface BrowserWindowController(Private)
// open a new window or tab, but doesn't load anything into them. Must be matched
// with a call to do that.
- (BrowserWindowController*)openNewWindow:(BOOL)aLoadInBG;
- (BrowserTabViewItem*)openNewTab:(BOOL)aLoadInBG;
- (void)setupToolbar;
- (void)setupSidebarTabs;
- (NSString*)getContextMenuNodeDocumentURL;
- (void)loadSourceOfURL:(NSString*)urlStr;
- (void) transformFormatString:(NSMutableString*)inFormat domain:(NSString*)inDomain search:(NSString*)inSearch;
-(void)openNewWindowWithDescriptor:(nsISupports*)aDesc displayType:(PRUint32)aDisplayType loadInBackground:(BOOL)aLoadInBG;
-(void)openNewTabWithDescriptor:(nsISupports*)aDesc displayType:(PRUint32)aDisplayType loadInBackground:(BOOL)aLoadInBG;
@end
@implementation BrowserWindowController
@ -1216,16 +1224,26 @@ static NSArray* sToolbarDefaults = nil;
- (void)loadSourceOfURL:(NSString*)urlStr
{
NSString* viewSource = [@"view-source:" stringByAppendingString: urlStr];
// first attempt to get the source that's already loaded
PRBool loadInBackground;
nsCOMPtr<nsIPrefBranch> pref(do_GetService("@mozilla.org/preferences-service;1"));
pref->GetBoolPref("browser.tabs.loadInBackground", &loadInBackground);
if (![self newTabsAllowed])
[self openNewWindowWithURL: viewSource referrer:nil loadInBackground: loadInBackground];
else
nsCOMPtr<nsISupports> desc = [[mBrowserView getBrowserView] getPageDescriptor];
if (desc) {
if ([self newTabsAllowed])
[self openNewTabWithDescriptor:desc displayType:nsIWebPageDescriptor::DISPLAY_AS_SOURCE loadInBackground:loadInBackground];
else
[self openNewWindowWithDescriptor:desc displayType:nsIWebPageDescriptor::DISPLAY_AS_SOURCE loadInBackground:loadInBackground];
return;
}
//otherwise reload it from the server
NSString* viewSource = [@"view-source:" stringByAppendingString: urlStr];
if ([self newTabsAllowed])
[self openNewTabWithURL: viewSource referrer:nil loadInBackground: loadInBackground];
else
[self openNewWindowWithURL: viewSource referrer:nil loadInBackground: loadInBackground];
}
- (IBAction)viewSource:(id)aSender
@ -1905,29 +1923,27 @@ static NSArray* sToolbarDefaults = nil;
-(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"];
BrowserWindowController* browser = [self openNewWindow:aLoadInBG];
[browser loadURL: aURLSpec referrer:aReferrer activate:!aLoadInBG];
if (aLoadInBG)
{
BrowserWindow* browserWin = [browser window];
[browserWin setSuppressMakeKeyFront:YES]; // prevent gecko focus bringing the window to the front
[browserWin orderWindow: NSWindowBelow relativeTo: [[self window] windowNumber]];
[browserWin setSuppressMakeKeyFront:NO];
}
else
[browser showWindow:self];
}
- (void)openNewWindowWithGroupURLs: (NSArray *)urlArray loadInBackground: (BOOL)aLoadInBG
{
BrowserWindowController* browser = [self openNewWindow:aLoadInBG];
[browser openTabGroup:urlArray replaceExistingTabs:YES];
}
//
// -openNewWindow:
//
// open a new window, but doesn't load anything into it. Must be matched
// with a call to do that.
//
- (BrowserWindowController*)openNewWindow:(BOOL)aLoadInBG
{
// Autosave our dimensions before we open a new window. That ensures the size ends up matching.
[self autosaveWindowFrame];
// Tell the Tab Browser in the newly created window to load the group
BrowserWindowController* browser = [[BrowserWindowController alloc] initWithWindowNibName: @"BrowserWindow"];
if (aLoadInBG)
{
@ -1938,13 +1954,25 @@ static NSArray* sToolbarDefaults = nil;
}
else
[browser showWindow:self];
[browser openTabGroup:urlArray replaceExistingTabs:YES];
return browser;
}
-(void)openNewTabWithURL: (NSString*)aURLSpec referrer:(NSString*)aReferrer loadInBackground: (BOOL)aLoadInBG
{
BrowserTabViewItem* newTab = [self openNewTab:aLoadInBG];
[[newTab view] loadURI:aURLSpec referrer:aReferrer flags:NSLoadFlagsNone activate:!aLoadInBG];
}
//
// -openNewTab:
//
// open a new tab, but doesn't load anything into it. Must be matched
// with a call to do that.
//
- (BrowserTabViewItem*)openNewTab:(BOOL)aLoadInBG;
{
BrowserTabViewItem* newTab = [self createNewTabItem];
BrowserWrapper* newView = [newTab view];
[self ensureBrowserVisible:self];
@ -1968,9 +1996,22 @@ static NSArray* sToolbarDefaults = nil;
if (!aLoadInBG)
[mTabBrowser selectTabViewItem: newTab];
[newView loadURI:aURLSpec referrer:aReferrer flags:NSLoadFlagsNone activate:!aLoadInBG];
return newTab;
}
-(void)openNewWindowWithDescriptor:(nsISupports*)aDesc displayType:(PRUint32)aDisplayType loadInBackground:(BOOL)aLoadInBG;
{
BrowserWindowController* browser = [self openNewWindow:aLoadInBG];
[[[browser getBrowserWrapper] getBrowserView] setPageDescriptor:aDesc displayType:aDisplayType];
}
-(void)openNewTabWithDescriptor:(nsISupports*)aDesc displayType:(PRUint32)aDisplayType loadInBackground:(BOOL)aLoadInBG;
{
BrowserTabViewItem* newTab = [self openNewTab:aLoadInBG];
[[[newTab view] getBrowserView] setPageDescriptor:aDesc displayType:aDisplayType];
}
- (void)openTabGroup:(NSArray*)urlArray replaceExistingTabs:(BOOL)replaceExisting
{
int curNumTabs = [mTabBrowser numberOfTabViewItems];

Просмотреть файл

@ -41,6 +41,9 @@
#undef DARWIN
#import <Cocoa/Cocoa.h>
#include "prtypes.h"
#include "nsCOMPtr.h"
@class CHBrowserView;
class CHBrowserListener;
class nsIDOMWindow;
@ -52,6 +55,7 @@ class nsIEventSink;
class nsIDragHelperService;
class nsIPrintSettings;
class nsIURI;
class nsISupports;
// Protocol implemented by anyone interested in progress
@ -223,6 +227,9 @@ enum {
- (IBAction)reloadWithNewCharset:(NSString*)charset;
- (NSString*)currentCharset;
- (already_AddRefed<nsISupports>)getPageDescriptor;
- (void)setPageDescriptor:(nsISupports*)aDesc displayType:(PRUint32)aDisplayType;
@end
#endif // __nsCocoaBrowserView_h__

Просмотреть файл

@ -79,6 +79,7 @@
#include "nsIWebBrowserFind.h"
#include "nsNetUtil.h"
#include "SaveHeaderSniffer.h"
#include "nsIWebPageDescriptor.h"
#import "CHBrowserView.h"
@ -99,6 +100,7 @@ typedef unsigned int DragReference;
#include "nsICommandParams.h"
const char kPersistContractID[] = "@mozilla.org/embedding/browser/nsWebBrowserPersist;1";
const char kDirServiceContractID[] = "@mozilla.org/file/directory_service;1";
@ -1245,4 +1247,26 @@ const char kDirServiceContractID[] = "@mozilla.org/file/directory_service;1";
return nil;
}
- (already_AddRefed<nsISupports>)getPageDescriptor
{
nsCOMPtr<nsIDocShell> docShell = dont_AddRef([self getDocShell]);
nsCOMPtr<nsIWebPageDescriptor> wpd = do_QueryInterface(docShell);
if(!wpd)
return NULL;
nsISupports *desc = NULL;
wpd->GetCurrentDescriptor(&desc); // addrefs
return desc;
}
- (void)setPageDescriptor:(nsISupports*)aDesc displayType:(PRUint32)aDisplayType
{
nsCOMPtr<nsIDocShell> docShell = dont_AddRef([self getDocShell]);
nsCOMPtr<nsIWebPageDescriptor> wpd = do_QueryInterface(docShell);
if(!wpd)
return;
wpd->LoadPage(aDesc, aDisplayType);
}
@end