Closed
Bug 1438026
Opened 6 years ago
Closed 6 years ago
Replace nsLayoutHistoryState and nsPresState with something easier to serialize
Categories
(Core :: DOM: Navigation, enhancement, P2)
Core
DOM: Navigation
Tracking
()
RESOLVED
FIXED
mozilla61
Tracking | Status | |
---|---|---|
firefox61 | --- | fixed |
People
(Reporter: nika, Assigned: nika)
References
(Blocks 1 open bug)
Details
Attachments
(4 files)
6.62 KB,
patch
|
baku
:
review+
|
Details | Diff | Splinter Review |
4.19 KB,
patch
|
baku
:
review+
|
Details | Diff | Splinter Review |
62.60 KB,
patch
|
baku
:
review+
|
Details | Diff | Splinter Review |
4.55 KB,
patch
|
baku
:
review+
|
Details | Diff | Splinter Review |
These types are fairly simple under the hood, and mostly just contain hashtables, strings, and basic types. We will want to be able to serialize these objects in order to implement the improved session history APIs, as they save important information. It shouldn't be too difficult to replace the APIs under the hood with easier to serialize ones built on IPDL structs and unions.
Updated•6 years ago
|
Priority: -- → P2
Assignee | ||
Comment 1•6 years ago
|
||
This impl supports serializing null RefPtr<BlobImpl> objects, and will handle a failure to serialize a BlobImpl by sending a nullptr. This was the best error handling option which I have access to inside of IPDLParamTraits unless we implement bug 1442678. This means consumers of this interface always have to sanely handle null blobimpls on the receiver. MozReview-Commit-ID: 61UmQEjn7BF
Attachment #8955595 -
Flags: review?(amarchesini)
Assignee | ||
Comment 2•6 years ago
|
||
MozReview-Commit-ID: 1p4B7czWPvZ
Attachment #8955597 -
Flags: review?(amarchesini)
Assignee | ||
Comment 3•6 years ago
|
||
MozReview-Commit-ID: JXSlpqQNIbL
Attachment #8955598 -
Flags: review?(amarchesini)
Assignee | ||
Comment 4•6 years ago
|
||
MozReview-Commit-ID: Cl6IaxP6xHW
Attachment #8955599 -
Flags: review?(amarchesini)
Updated•6 years ago
|
Attachment #8955595 -
Flags: review?(amarchesini) → review+
Updated•6 years ago
|
Attachment #8955597 -
Flags: review?(amarchesini) → review+
Comment 5•6 years ago
|
||
Comment on attachment 8955598 [details] [diff] [review] Part 3: Replace nsPresState with the new PresState type Review of attachment 8955598 [details] [diff] [review]: ----------------------------------------------------------------- ::: dom/html/HTMLButtonElement.cpp @@ +28,5 @@ > #include "mozilla/MouseEvents.h" > #include "mozilla/TextEvents.h" > #include "nsUnicharUtils.h" > #include "nsLayoutUtils.h" > +#include "mozilla/PresState.h" alphabetic order. Or something similar... ::: dom/html/HTMLInputElement.cpp @@ +6242,5 @@ > return aFormSubmission->AddNameValuePair(name, value); > } > > +static nsTArray<FileContentData> > +SaveFileContentData(const nsTArray<OwningFileOrDirectory>& aArray) Can you please have nsTArray<> as argument instead of returning it? @@ +6508,5 @@ > } > > +static nsTArray<OwningFileOrDirectory> > +RestoreFileContentData(nsPIDOMWindowInner* aWindow, > + const nsTArray<FileContentData>& aData) same here. ::: dom/html/HTMLTextAreaElement.cpp @@ +35,5 @@ > #include "nsLinebreakConverter.h" > #include "nsMappedAttributes.h" > #include "nsPIDOMWindow.h" > #include "nsPresContext.h" > +#include "mozilla/PresState.h" Maybe move it near a mozilla/something_else include. ::: layout/base/nsLayoutHistoryState.cpp @@ +11,5 @@ > > #include "nsILayoutHistoryState.h" > #include "nsWeakReference.h" > #include "nsClassHashtable.h" > +#include "mozilla/PresState.h" alphabetic order.
Attachment #8955598 -
Flags: review?(amarchesini) → review+
Comment 6•6 years ago
|
||
Comment on attachment 8955599 [details] [diff] [review] Part 4: Remove the old nsPresState code completely Review of attachment 8955599 [details] [diff] [review]: ----------------------------------------------------------------- wonderful.
Attachment #8955599 -
Flags: review?(amarchesini) → review+
Pushed by nika@thelayzells.com: https://hg.mozilla.org/integration/mozilla-inbound/rev/1c1e0d112e26 Part 1: Add IPDLParamTraits for RefPtr<BlobImpl>, r=baku https://hg.mozilla.org/integration/mozilla-inbound/rev/7dadb3852649 Part 2: Add IPDL definitions for the PresState data structures, r=baku https://hg.mozilla.org/integration/mozilla-inbound/rev/f394ca4f80af Part 3: Replace nsPresState with the new PresState type, r=baku https://hg.mozilla.org/integration/mozilla-inbound/rev/e1fab4fd5afa Part 4: Remove the old nsPresState code completely, r=baku
Comment 8•6 years ago
|
||
bugherder |
https://hg.mozilla.org/mozilla-central/rev/1c1e0d112e26 https://hg.mozilla.org/mozilla-central/rev/7dadb3852649 https://hg.mozilla.org/mozilla-central/rev/f394ca4f80af https://hg.mozilla.org/mozilla-central/rev/e1fab4fd5afa
Status: NEW → RESOLVED
Closed: 6 years ago
status-firefox61:
--- → fixed
Resolution: --- → FIXED
Target Milestone: --- → mozilla61
After this change I get a permanent compile errors in files using NewPresState() and similar. What may be going wrong? This is on Linux with gcc 7.3. At least some of the files calling NewPresState() do #include "nsILayoutHistoryState.h" which contains a stub declaration of it. In file included from mozilla/layout/base/nsCSSFrameConstructor.h:21:0, from mozilla/layout/base/nsBidiPresUtils.cpp:18, from tbird-bin/layout/base/Unified_cpp_layout_base1.cpp:2: /mozilla/layout/base/nsILayoutHistoryState.h:17:7: note: class type ‘nsPresState’ is incomplete class nsPresState; /* forward declaration */ ^~~~~~~~~~~ In file included from bin/layout/base/Unified_cpp_layout_base1.cpp:92:0: mozilla/layout/base/nsLayoutHistoryState.cpp: In member function ‘virtual nsresult nsLayoutHistoryState::AddNewPresState(const nsACString&, float, float, bool, float, bool)’: mozilla/layout/base/nsLayoutHistoryState.cpp:106:35: error: ‘NewPresState’ was not declared in this scope UniquePtr<PresState> newState = NewPresState(); ^~~~~~~~~~~~ mozilla/layout/base/nsLayoutHistoryState.cpp:106:35: note: suggested alternative: ‘GetPresState’ UniquePtr<PresState> newState = NewPresState(); ^~~~~~~~~~~~ GetPresState mozilla/layout/base/nsLayoutHistoryState.cpp: At global scope: mozilla/layout/base/nsLayoutHistoryState.cpp:118:1: error: prototype for ‘void nsLayoutHistoryState::AddState(const nsCString&, mozilla::UniquePtr<mozilla::PresState>)’ does not match any in class ‘nsLayoutHistoryState’ nsLayoutHistoryState::AddState(const nsCString& aStateKey, UniquePtr<PresState> aState) ^~~~~~~~~~~~~~~~~~~~ In file included from mozilla/layout/base/nsCSSFrameConstructor.h:21:0, from mozilla/layout/base/nsBidiPresUtils.cpp:18, from tbird-bin/layout/base/Unified_cpp_layout_base1.cpp:2: mozilla/layout/base/nsILayoutHistoryState.h:74:16: error: candidate is: virtual void nsLayoutHistoryState::AddState(const nsCString&, nsPresState*) virtual void AddState(const nsCString & aKey, nsPresState *aState) override; \ ^ mozilla/layout/base/nsILayoutHistoryState.h:74:16: note: in definition of macro ‘NS_DECL_NSILAYOUTHISTORYSTATE’ virtual void AddState(const nsCString & aKey, nsPresState *aState) override; \ ^~~~~~~~ In file included from bin/layout/base/Unified_cpp_layout_base1.cpp:92:0: mozilla/layout/base/nsLayoutHistoryState.cpp:124:1: error: prototype for ‘mozilla::PresState* nsLayoutHistoryState::GetState(const nsCString&)’ does not match any in class ‘nsLayoutHistoryState’ nsLayoutHistoryState::GetState(const nsCString& aKey) ^~~~~~~~~~~~~~~~~~~~ In file included from mozilla/layout/base/nsCSSFrameConstructor.h:21:0, from mozilla/layout/base/nsBidiPresUtils.cpp:18, from bin/layout/base/Unified_cpp_layout_base1.cpp:2: mozilla/layout/base/nsILayoutHistoryState.h:75:25: error: candidate is: virtual nsPresState* nsLayoutHistoryState::GetState(const nsCString&) virtual nsPresState * GetState(const nsCString & aKey) override; \ ^ mozilla/layout/base/nsILayoutHistoryState.h:75:25: note: in definition of macro ‘NS_DECL_NSILAYOUTHISTORYSTATE’ virtual nsPresState * GetState(const nsCString & aKey) override; \ ^~~~~~~~ gmake[4]: *** [mozilla/config/rules.mk:1024: Unified_cpp_layout_base1.o] Error 1 gmake[3]: *** [mozilla/config/recurse.mk:73: layout/base/target] Error 2
Comment 10•6 years ago
|
||
Another developer reports this on Mac/clang: "layout/generic/nsGfxScrollFrame.cpp:6221:32: error: use of undeclared identifier 'NewPresState'" No such error in automation or on Windows.
Flags: needinfo?(nika)
Flags: needinfo?(amarchesini)
Comment 11•6 years ago
|
||
Looks like people had nsILayoutHistoryState.h in the source tree(!??).
Flags: needinfo?(nika)
Flags: needinfo?(amarchesini)
You need to log in
before you can comment on or make changes to this bug.
Description
•