WebKit Bugzilla
Attachment 341207 Details for
Bug 185952
: Cache navigator.userAgent for performance
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
Patch
bug-185952-20180524105143.patch (text/plain), 5.05 KB, created by
Chris Dumez
on 2018-05-24 10:51:43 PDT
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
Chris Dumez
Created:
2018-05-24 10:51:43 PDT
Size:
5.05 KB
patch
obsolete
>Subversion Revision: 232125 >diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog >index 894ae700af9d610da747ec7560936e244b7e4c75..3bc8a03608917e41b5b6fe8167eedf5ee98c9917 100644 >--- a/Source/WebCore/ChangeLog >+++ b/Source/WebCore/ChangeLog >@@ -1,3 +1,22 @@ >+2018-05-24 Chris Dumez <cdumez@apple.com> >+ >+ Cache navigator.userAgent for performance >+ https://bugs.webkit.org/show_bug.cgi?id=185952 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ Cache navigator.userAgent for performance. Previously, we would ask the client 5 times >+ while loading apple.com. >+ >+ * page/Navigator.cpp: >+ (WebCore::Navigator::userAgent const): >+ * page/Navigator.h: >+ * page/NavigatorBase.h: >+ * page/NavigatorID.idl: >+ * page/WorkerNavigator.cpp: >+ (WebCore::WorkerNavigator::userAgent const): >+ * page/WorkerNavigator.h: >+ > 2018-05-23 Chris Dumez <cdumez@apple.com> > > RenderLayer::scrollRectToVisible() should not propagate a subframe's scroll to its cross-origin parent >diff --git a/Source/WebCore/page/Navigator.cpp b/Source/WebCore/page/Navigator.cpp >index 30e40eca61e1153b1a1a45fe0f4b970915ebd5cb..9a8d268c8817b35b40369dc2ac6e039408abf30f 100644 >--- a/Source/WebCore/page/Navigator.cpp >+++ b/Source/WebCore/page/Navigator.cpp >@@ -77,17 +77,11 @@ String Navigator::appVersion() const > return appVersion; > } > >-String Navigator::userAgent() const >+const String& Navigator::userAgent() const > { >- if (!m_frame) >- return String(); >- >- // If the frame is already detached, FrameLoader::userAgent may malfunction, because it calls a client method >- // that uses frame's WebView (at least, in Mac WebKit). >- if (!m_frame->page()) >- return String(); >- >- return m_frame->loader().userAgent(m_frame->document()->url()); >+ if (m_userAgent.isNull() && m_frame && m_frame->page()) >+ m_userAgent = m_frame->loader().userAgent(m_frame->document()->url()); >+ return m_userAgent; > } > > bool Navigator::onLine() const >diff --git a/Source/WebCore/page/Navigator.h b/Source/WebCore/page/Navigator.h >index 808bd67480b9cd5ddf7f9b8d027598b9f27d1023..1816e3a56d1d7c21102cea26b7eb6658123997ca 100644 >--- a/Source/WebCore/page/Navigator.h >+++ b/Source/WebCore/page/Navigator.h >@@ -39,7 +39,7 @@ public: > DOMMimeTypeArray& mimeTypes(); > bool cookieEnabled() const; > bool javaEnabled() const; >- String userAgent() const final; >+ const String& userAgent() const final; > bool onLine() const final; > > #if PLATFORM(IOS) >@@ -53,6 +53,7 @@ private: > > mutable RefPtr<DOMPluginArray> m_plugins; > mutable RefPtr<DOMMimeTypeArray> m_mimeTypes; >+ mutable String m_userAgent; > }; > > } >diff --git a/Source/WebCore/page/NavigatorBase.h b/Source/WebCore/page/NavigatorBase.h >index 838d2002e77fc3689510ea2122a3dbd035da5a0a..7015c3857a5f2b9cdce579a06359e2edf90527fe 100644 >--- a/Source/WebCore/page/NavigatorBase.h >+++ b/Source/WebCore/page/NavigatorBase.h >@@ -42,7 +42,7 @@ public: > > static String appName(); > String appVersion() const; >- virtual String userAgent() const = 0; >+ virtual const String& userAgent() const = 0; > static String platform(); > > static String appCodeName(); >diff --git a/Source/WebCore/page/NavigatorID.idl b/Source/WebCore/page/NavigatorID.idl >index 57967ce5c183b66d318919c269cc3539c0d573e1..f6b14faefc33bc5d0050208402c75eecc7a64383 100644 >--- a/Source/WebCore/page/NavigatorID.idl >+++ b/Source/WebCore/page/NavigatorID.idl >@@ -35,7 +35,7 @@ > readonly attribute DOMString platform; > readonly attribute DOMString product; > [Exposed=Window] readonly attribute DOMString productSub; >- readonly attribute DOMString userAgent; >+ [CachedAttribute] readonly attribute DOMString userAgent; > [Exposed=Window] readonly attribute DOMString vendor; > [Exposed=Window] readonly attribute DOMString vendorSub; > }; >diff --git a/Source/WebCore/page/WorkerNavigator.cpp b/Source/WebCore/page/WorkerNavigator.cpp >index 1a368f68b0c7e81a34848410941aed8bad994a69..b4964c511baad1d1dd660357a4777ac9070a04c2 100644 >--- a/Source/WebCore/page/WorkerNavigator.cpp >+++ b/Source/WebCore/page/WorkerNavigator.cpp >@@ -36,7 +36,7 @@ WorkerNavigator::WorkerNavigator(ScriptExecutionContext& context, const String& > { > } > >-String WorkerNavigator::userAgent() const >+const String& WorkerNavigator::userAgent() const > { > return m_userAgent; > } >diff --git a/Source/WebCore/page/WorkerNavigator.h b/Source/WebCore/page/WorkerNavigator.h >index 9bed5f7b39a904ad4ba23acecbba04df5d1ca2b5..45ecf66c7d20c82bd52cf55d1fb94a8c32b4b450 100644 >--- a/Source/WebCore/page/WorkerNavigator.h >+++ b/Source/WebCore/page/WorkerNavigator.h >@@ -35,7 +35,7 @@ class WorkerNavigator final : public NavigatorBase, public Supplementable<Worker > public: > static Ref<WorkerNavigator> create(ScriptExecutionContext& context, const String& userAgent, bool isOnline) { return adoptRef(*new WorkerNavigator(context, userAgent, isOnline)); } > >- String userAgent() const final; >+ const String& userAgent() const final; > bool onLine() const final; > void setIsOnline(bool isOnline) { m_isOnline = isOnline; } >
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 185952
: 341207