From ab669e18ee5e41877cabe2781aa9843458eaee02 Mon Sep 17 00:00:00 2001 From: "dbaron%fas.harvard.edu" Date: Thu, 27 Jul 2000 23:11:02 +0000 Subject: [PATCH] Improve performance of testing for visited links CSS selector matching by reducing string conversion and by caching the state of the link on the link element. r=waterson b=25963 git-svn-id: svn://10.0.0.236/trunk@74959 18797224-902f-48f8-a5cc-f745e15eee43 --- mozilla/content/html/content/public/MANIFEST | 1 + .../content/html/content/public/Makefile.in | 1 + .../content/html/content/public/makefile.win | 2 +- mozilla/content/html/content/public/nsILink.h | 78 +++++++++++++++++++ mozilla/layout/html/content/public/MANIFEST | 1 + .../layout/html/content/public/Makefile.in | 1 + .../layout/html/content/public/makefile.win | 2 +- mozilla/layout/html/content/public/nsILink.h | 78 +++++++++++++++++++ 8 files changed, 162 insertions(+), 2 deletions(-) create mode 100644 mozilla/content/html/content/public/nsILink.h create mode 100644 mozilla/layout/html/content/public/nsILink.h diff --git a/mozilla/content/html/content/public/MANIFEST b/mozilla/content/html/content/public/MANIFEST index 3948b65ce20..5c9714cf1e2 100644 --- a/mozilla/content/html/content/public/MANIFEST +++ b/mozilla/content/html/content/public/MANIFEST @@ -1,4 +1,5 @@ nsIForm.h nsIFormControl.h +nsILink.h nsISelectElement.h diff --git a/mozilla/content/html/content/public/Makefile.in b/mozilla/content/html/content/public/Makefile.in index 7342f9a83e0..d23349c2830 100644 --- a/mozilla/content/html/content/public/Makefile.in +++ b/mozilla/content/html/content/public/Makefile.in @@ -31,6 +31,7 @@ MODULE = layout EXPORTS = \ nsIFormControl.h \ nsIForm.h \ + nsILink.h \ nsISelectElement.h \ $(NULL) diff --git a/mozilla/content/html/content/public/makefile.win b/mozilla/content/html/content/public/makefile.win index 72f2297df0a..53997e463cc 100644 --- a/mozilla/content/html/content/public/makefile.win +++ b/mozilla/content/html/content/public/makefile.win @@ -21,7 +21,7 @@ DEPTH=..\..\..\.. -EXPORTS=nsIFormControl.h nsIForm.h nsISelectElement.h +EXPORTS=nsIFormControl.h nsIForm.h nsILink.h nsISelectElement.h MODULE=raptor diff --git a/mozilla/content/html/content/public/nsILink.h b/mozilla/content/html/content/public/nsILink.h new file mode 100644 index 00000000000..7a670ce3a9a --- /dev/null +++ b/mozilla/content/html/content/public/nsILink.h @@ -0,0 +1,78 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- + * + * The contents of this file are subject to the Netscape Public + * License Version 1.1 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.mozilla.org/NPL/ + * + * Software distributed under the License is distributed on an "AS + * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or + * implied. See the License for the specific language governing + * rights and limitations under the License. + * + * The Original Code is mozilla.org code. + * + * The Initial Developer of the Original Code is Netscape + * Communications Corporation. Portions created by Netscape are + * Copyright (C) 1998 Netscape Communications Corporation. All + * Rights Reserved. + * + * Contributor(s): + * L. David Baron + */ +#ifndef nsILink_h___ +#define nsILink_h___ + +#include "nsISupports.h" +#include "nsILinkHandler.h" // definition of nsLinkState + +// IID for the nsILink interface +#define NS_ILINK_IID \ +{ 0xa904ac22, 0x28fa, 0x4812, \ + { 0xbe, 0xf3, 0x2, 0x2f, 0xf3, 0x3b, 0x8e, 0xf5 } } + +/** + * This interface allows SelectorMatches to get the canonical + * URL pointed to by an element representing a link and allows + * it to store the visited state of a link element in the link. + * It is needed for performance reasons (to prevent copying of + * strings and excessive calls to history). + */ +class nsILink : public nsISupports { +public: + NS_DEFINE_STATIC_IID_ACCESSOR(NS_ILINK_IID) + + /** + * Get the cached state of the link. If the state is unknown, + * return eLinkState_Unknown. + * + * @param aState [out] The cached link state of the link. + * @return NS_OK + */ + NS_IMETHOD GetLinkState(nsLinkState &aState) = 0; + + /** + * Set the cached state of the link. + * + * @param aState The cached link state of the link. + * @return NS_OK + */ + NS_IMETHOD SetLinkState(nsLinkState aState) = 0; + + /** + * Get a pointer to the canonical URL (i.e., fully resolved to the + * base URL) that this linkable element points to. The buffer + * returned has been allocated for and should be deleted by the + * caller. + * + * @param aBuf [out] A pointer to be filled in with a pointer to a + * null-terminated string containing the canonical URL. + * If the element has no HREF attribute, it is set to + * nsnull. + * @return NS_OK if the out pointer is filled in + */ + NS_IMETHOD GetHrefCString(char* &aBuf) = 0; + +}; + +#endif /* nsILink_h___ */ diff --git a/mozilla/layout/html/content/public/MANIFEST b/mozilla/layout/html/content/public/MANIFEST index 3948b65ce20..5c9714cf1e2 100644 --- a/mozilla/layout/html/content/public/MANIFEST +++ b/mozilla/layout/html/content/public/MANIFEST @@ -1,4 +1,5 @@ nsIForm.h nsIFormControl.h +nsILink.h nsISelectElement.h diff --git a/mozilla/layout/html/content/public/Makefile.in b/mozilla/layout/html/content/public/Makefile.in index 7342f9a83e0..d23349c2830 100644 --- a/mozilla/layout/html/content/public/Makefile.in +++ b/mozilla/layout/html/content/public/Makefile.in @@ -31,6 +31,7 @@ MODULE = layout EXPORTS = \ nsIFormControl.h \ nsIForm.h \ + nsILink.h \ nsISelectElement.h \ $(NULL) diff --git a/mozilla/layout/html/content/public/makefile.win b/mozilla/layout/html/content/public/makefile.win index 72f2297df0a..53997e463cc 100644 --- a/mozilla/layout/html/content/public/makefile.win +++ b/mozilla/layout/html/content/public/makefile.win @@ -21,7 +21,7 @@ DEPTH=..\..\..\.. -EXPORTS=nsIFormControl.h nsIForm.h nsISelectElement.h +EXPORTS=nsIFormControl.h nsIForm.h nsILink.h nsISelectElement.h MODULE=raptor diff --git a/mozilla/layout/html/content/public/nsILink.h b/mozilla/layout/html/content/public/nsILink.h new file mode 100644 index 00000000000..7a670ce3a9a --- /dev/null +++ b/mozilla/layout/html/content/public/nsILink.h @@ -0,0 +1,78 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- + * + * The contents of this file are subject to the Netscape Public + * License Version 1.1 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.mozilla.org/NPL/ + * + * Software distributed under the License is distributed on an "AS + * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or + * implied. See the License for the specific language governing + * rights and limitations under the License. + * + * The Original Code is mozilla.org code. + * + * The Initial Developer of the Original Code is Netscape + * Communications Corporation. Portions created by Netscape are + * Copyright (C) 1998 Netscape Communications Corporation. All + * Rights Reserved. + * + * Contributor(s): + * L. David Baron + */ +#ifndef nsILink_h___ +#define nsILink_h___ + +#include "nsISupports.h" +#include "nsILinkHandler.h" // definition of nsLinkState + +// IID for the nsILink interface +#define NS_ILINK_IID \ +{ 0xa904ac22, 0x28fa, 0x4812, \ + { 0xbe, 0xf3, 0x2, 0x2f, 0xf3, 0x3b, 0x8e, 0xf5 } } + +/** + * This interface allows SelectorMatches to get the canonical + * URL pointed to by an element representing a link and allows + * it to store the visited state of a link element in the link. + * It is needed for performance reasons (to prevent copying of + * strings and excessive calls to history). + */ +class nsILink : public nsISupports { +public: + NS_DEFINE_STATIC_IID_ACCESSOR(NS_ILINK_IID) + + /** + * Get the cached state of the link. If the state is unknown, + * return eLinkState_Unknown. + * + * @param aState [out] The cached link state of the link. + * @return NS_OK + */ + NS_IMETHOD GetLinkState(nsLinkState &aState) = 0; + + /** + * Set the cached state of the link. + * + * @param aState The cached link state of the link. + * @return NS_OK + */ + NS_IMETHOD SetLinkState(nsLinkState aState) = 0; + + /** + * Get a pointer to the canonical URL (i.e., fully resolved to the + * base URL) that this linkable element points to. The buffer + * returned has been allocated for and should be deleted by the + * caller. + * + * @param aBuf [out] A pointer to be filled in with a pointer to a + * null-terminated string containing the canonical URL. + * If the element has no HREF attribute, it is set to + * nsnull. + * @return NS_OK if the out pointer is filled in + */ + NS_IMETHOD GetHrefCString(char* &aBuf) = 0; + +}; + +#endif /* nsILink_h___ */