REGRESSION (r158369): Some pop-up windows open at incorrect size (affects GMail, theblaze.com)
https://bugs.webkit.org/show_bug.cgi?id=126289
Reviewed by Anders Carlson.
Partial revert of https://bugs.webkit.org/show_bug.cgi?id=123557.
On window.open, update page when the UIProcess sends the create message
Source/WebKit2:
* UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::initializeWebPage):
(WebKit::WebPageProxy::creationParameters):
* UIProcess/WebPageProxy.h:
- creation paraments are not preserved at window.open.
* WebProcess/WebPage/WebPage.cpp:
(WebKit::WebPage::reinitializeWebPage):
(WebKit::WebPage::setViewState):
(WebKit::WebPage::setViewStateInternal):
* WebProcess/WebPage/WebPage.h:
- add interface to update page.
* WebProcess/WebProcess.cpp:
(WebKit::WebProcess::createWebPage):
- if we try to create a page that already exists, update the current page's view state.
LayoutTests:
* platform/mac-wk2/TestExpectations:
- test is bad (results in DRT don't reflect in browser behaviour).
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@162088 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/LayoutTests/ChangeLog b/LayoutTests/ChangeLog
index 7309a49..6d9b842 100644
--- a/LayoutTests/ChangeLog
+++ b/LayoutTests/ChangeLog
@@ -1,3 +1,16 @@
+2014-01-15 Gavin Barraclough <barraclough@apple.com>
+
+ REGRESSION (r158369): Some pop-up windows open at incorrect size (affects GMail, theblaze.com)
+ https://bugs.webkit.org/show_bug.cgi?id=126289
+
+ Reviewed by Anders Carlson.
+
+ Partial revert of https://bugs.webkit.org/show_bug.cgi?id=123557.
+ On window.open, update page when the UIProcess sends the create message
+
+ * platform/mac-wk2/TestExpectations:
+ - test is bad (results in DRT don't reflect in browser behaviour).
+
2014-01-15 Frédéric Wang <fred.wang@free.fr>
[SVG] Accept HTML and MathML namespaces as valid requiredExtensions
diff --git a/LayoutTests/platform/mac-wk2/TestExpectations b/LayoutTests/platform/mac-wk2/TestExpectations
index b347c51..99739be 100644
--- a/LayoutTests/platform/mac-wk2/TestExpectations
+++ b/LayoutTests/platform/mac-wk2/TestExpectations
@@ -443,6 +443,9 @@
# <rdar://problem/15171108>
[ Mavericks ] fast/forms/form-associated-element-removal.html [ Crash Pass ]
+# test results in DRT don't match in browser behavior, test seems broken
+fast/dom/Window/mozilla-focus-blur.html [ Failure ]
+
webkit.org/b/126962 plugins/plugin-document-load-prevented-userscript.html [ Crash Pass Timeout ]
### END OF (3) Unclassified failures
diff --git a/Source/WebKit2/ChangeLog b/Source/WebKit2/ChangeLog
index f1f4bf2..2561ceb 100644
--- a/Source/WebKit2/ChangeLog
+++ b/Source/WebKit2/ChangeLog
@@ -1,3 +1,28 @@
+2014-01-10 Gavin Barraclough <barraclough@apple.com>
+
+ REGRESSION (r158369): Some pop-up windows open at incorrect size (affects GMail, theblaze.com)
+ https://bugs.webkit.org/show_bug.cgi?id=126289
+
+ Reviewed by Anders Carlson.
+
+ Partial revert of https://bugs.webkit.org/show_bug.cgi?id=123557.
+ On window.open, update page when the UIProcess sends the create message
+
+ * UIProcess/WebPageProxy.cpp:
+ (WebKit::WebPageProxy::initializeWebPage):
+ (WebKit::WebPageProxy::creationParameters):
+ * UIProcess/WebPageProxy.h:
+ - creation paraments are not preserved at window.open.
+ * WebProcess/WebPage/WebPage.cpp:
+ (WebKit::WebPage::reinitializeWebPage):
+ (WebKit::WebPage::setViewState):
+ (WebKit::WebPage::setViewStateInternal):
+ * WebProcess/WebPage/WebPage.h:
+ - add interface to update page.
+ * WebProcess/WebProcess.cpp:
+ (WebKit::WebProcess::createWebPage):
+ - if we try to create a page that already exists, update the current page's view state.
+
2014-01-15 Carlos Garcia Campos <cgarcia@igalia.com>
[GTK] Web process sometimes crashes when printing in synchronous mode
diff --git a/Source/WebKit2/UIProcess/WebPageProxy.cpp b/Source/WebKit2/UIProcess/WebPageProxy.cpp
index 758ee4f..c99c8b4 100644
--- a/Source/WebKit2/UIProcess/WebPageProxy.cpp
+++ b/Source/WebKit2/UIProcess/WebPageProxy.cpp
@@ -517,8 +517,7 @@
inspector()->enableRemoteInspection();
#endif
- initializeCreationParameters();
- process().send(Messages::WebProcess::CreateWebPage(m_pageID, m_creationParameters), 0);
+ process().send(Messages::WebProcess::CreateWebPage(m_pageID, creationParameters()), 0);
#if PLATFORM(MAC)
send(Messages::WebPage::SetSmartInsertDeleteEnabled(m_isSmartInsertDeleteEnabled));
@@ -3868,41 +3867,45 @@
#endif
}
-void WebPageProxy::initializeCreationParameters()
+WebPageCreationParameters WebPageProxy::creationParameters()
{
- m_creationParameters.viewSize = m_pageClient.viewSize();
- m_creationParameters.viewState = m_viewState;
- m_creationParameters.drawingAreaType = m_drawingArea->type();
- m_creationParameters.store = m_pageGroup->preferences()->store();
- m_creationParameters.pageGroupData = m_pageGroup->data();
- m_creationParameters.drawsBackground = m_drawsBackground;
- m_creationParameters.drawsTransparentBackground = m_drawsTransparentBackground;
- m_creationParameters.underlayColor = m_underlayColor;
- m_creationParameters.areMemoryCacheClientCallsEnabled = m_areMemoryCacheClientCallsEnabled;
- m_creationParameters.useFixedLayout = m_useFixedLayout;
- m_creationParameters.fixedLayoutSize = m_fixedLayoutSize;
- m_creationParameters.suppressScrollbarAnimations = m_suppressScrollbarAnimations;
- m_creationParameters.paginationMode = m_paginationMode;
- m_creationParameters.paginationBehavesLikeColumns = m_paginationBehavesLikeColumns;
- m_creationParameters.pageLength = m_pageLength;
- m_creationParameters.gapBetweenPages = m_gapBetweenPages;
- m_creationParameters.userAgent = userAgent();
- m_creationParameters.sessionState = SessionState(m_backForwardList->entries(), m_backForwardList->currentIndex());
- m_creationParameters.highestUsedBackForwardItemID = WebBackForwardListItem::highedUsedItemID();
- m_creationParameters.canRunBeforeUnloadConfirmPanel = m_uiClient.canRunBeforeUnloadConfirmPanel();
- m_creationParameters.canRunModal = m_canRunModal;
- m_creationParameters.deviceScaleFactor = deviceScaleFactor();
- m_creationParameters.mediaVolume = m_mediaVolume;
- m_creationParameters.mayStartMediaWhenInWindow = m_mayStartMediaWhenInWindow;
- m_creationParameters.minimumLayoutSize = m_minimumLayoutSize;
- m_creationParameters.autoSizingShouldExpandToViewHeight = m_autoSizingShouldExpandToViewHeight;
- m_creationParameters.scrollPinningBehavior = m_scrollPinningBehavior;
- m_creationParameters.backgroundExtendsBeyondPage = m_backgroundExtendsBeyondPage;
- m_creationParameters.layerHostingMode = m_layerHostingMode;
+ WebPageCreationParameters parameters;
+
+ parameters.viewSize = m_pageClient.viewSize();
+ parameters.viewState = m_viewState;
+ parameters.drawingAreaType = m_drawingArea->type();
+ parameters.store = m_pageGroup->preferences()->store();
+ parameters.pageGroupData = m_pageGroup->data();
+ parameters.drawsBackground = m_drawsBackground;
+ parameters.drawsTransparentBackground = m_drawsTransparentBackground;
+ parameters.underlayColor = m_underlayColor;
+ parameters.areMemoryCacheClientCallsEnabled = m_areMemoryCacheClientCallsEnabled;
+ parameters.useFixedLayout = m_useFixedLayout;
+ parameters.fixedLayoutSize = m_fixedLayoutSize;
+ parameters.suppressScrollbarAnimations = m_suppressScrollbarAnimations;
+ parameters.paginationMode = m_paginationMode;
+ parameters.paginationBehavesLikeColumns = m_paginationBehavesLikeColumns;
+ parameters.pageLength = m_pageLength;
+ parameters.gapBetweenPages = m_gapBetweenPages;
+ parameters.userAgent = userAgent();
+ parameters.sessionState = SessionState(m_backForwardList->entries(), m_backForwardList->currentIndex());
+ parameters.highestUsedBackForwardItemID = WebBackForwardListItem::highedUsedItemID();
+ parameters.canRunBeforeUnloadConfirmPanel = m_uiClient.canRunBeforeUnloadConfirmPanel();
+ parameters.canRunModal = m_canRunModal;
+ parameters.deviceScaleFactor = deviceScaleFactor();
+ parameters.mediaVolume = m_mediaVolume;
+ parameters.mayStartMediaWhenInWindow = m_mayStartMediaWhenInWindow;
+ parameters.minimumLayoutSize = m_minimumLayoutSize;
+ parameters.autoSizingShouldExpandToViewHeight = m_autoSizingShouldExpandToViewHeight;
+ parameters.scrollPinningBehavior = m_scrollPinningBehavior;
+ parameters.backgroundExtendsBeyondPage = m_backgroundExtendsBeyondPage;
+ parameters.layerHostingMode = m_layerHostingMode;
#if PLATFORM(MAC) && !PLATFORM(IOS)
- m_creationParameters.colorSpace = m_pageClient.colorSpace();
+ parameters.colorSpace = m_pageClient.colorSpace();
#endif
+
+ return parameters;
}
#if USE(ACCELERATED_COMPOSITING)
diff --git a/Source/WebKit2/UIProcess/WebPageProxy.h b/Source/WebKit2/UIProcess/WebPageProxy.h
index 490b3e6..9e0028a 100644
--- a/Source/WebKit2/UIProcess/WebPageProxy.h
+++ b/Source/WebKit2/UIProcess/WebPageProxy.h
@@ -734,10 +734,7 @@
void didChooseFilesForOpenPanel(const Vector<String>&);
void didCancelForOpenPanel();
- WebPageCreationParameters creationParameters() const
- {
- return m_creationParameters;
- }
+ WebPageCreationParameters creationParameters();
#if USE(COORDINATED_GRAPHICS)
void findZoomableAreaForPoint(const WebCore::IntPoint&, const WebCore::IntSize&);
@@ -856,7 +853,6 @@
private:
WebPageProxy(PageClient&, WebProcessProxy&, WebPageGroup&, uint64_t pageID);
void platformInitialize();
- void initializeCreationParameters();
void updateViewState(WebCore::ViewState::Flags flagsToUpdate = WebCore::ViewState::AllFlags);
@@ -1373,8 +1369,6 @@
#endif
WebCore::ScrollPinningBehavior m_scrollPinningBehavior;
-
- WebPageCreationParameters m_creationParameters;
};
} // namespace WebKit
diff --git a/Source/WebKit2/WebProcess/WebPage/WebPage.cpp b/Source/WebKit2/WebProcess/WebPage/WebPage.cpp
index bf7af89..b275d8a 100644
--- a/Source/WebKit2/WebProcess/WebPage/WebPage.cpp
+++ b/Source/WebKit2/WebProcess/WebPage/WebPage.cpp
@@ -420,6 +420,14 @@
#endif
}
+void WebPage::reinitializeWebPage(const WebPageCreationParameters& parameters)
+{
+ if (m_viewState != parameters.viewState)
+ setViewStateInternal(parameters.viewState, true);
+ if (m_layerHostingMode != parameters.layerHostingMode)
+ setLayerHostingMode(parameters.layerHostingMode);
+}
+
WebPage::~WebPage()
{
if (m_backForwardList)
@@ -2028,19 +2036,24 @@
void WebPage::setViewState(ViewState::Flags viewState, bool wantsDidUpdateViewState)
{
+ setViewStateInternal(viewState, false);
+
+ if (wantsDidUpdateViewState)
+ m_sendDidUpdateViewStateTimer.startOneShot(0);
+}
+
+void WebPage::setViewStateInternal(ViewState::Flags viewState, bool isInitialState)
+{
ViewState::Flags changed = m_viewState ^ viewState;
m_viewState = viewState;
m_drawingArea->viewStateDidChange(changed);
- m_page->setViewState(viewState);
+ m_page->setViewState(viewState, isInitialState);
for (auto* pluginView : m_pluginViews)
pluginView->viewStateDidChange(changed);
if (changed & ViewState::IsInWindow)
updateIsInWindow();
-
- if (wantsDidUpdateViewState)
- m_sendDidUpdateViewStateTimer.startOneShot(0);
}
void WebPage::setLayerHostingMode(unsigned layerHostingMode)
diff --git a/Source/WebKit2/WebProcess/WebPage/WebPage.h b/Source/WebKit2/WebProcess/WebPage/WebPage.h
index a558917..3e287cf 100644
--- a/Source/WebKit2/WebProcess/WebPage/WebPage.h
+++ b/Source/WebKit2/WebProcess/WebPage/WebPage.h
@@ -170,6 +170,8 @@
static PassRefPtr<WebPage> create(uint64_t pageID, const WebPageCreationParameters&);
virtual ~WebPage();
+ void reinitializeWebPage(const WebPageCreationParameters&);
+
void close();
static WebPage* fromCorePage(WebCore::Page*);
@@ -730,6 +732,7 @@
void setWindowResizerSize(const WebCore::IntSize&);
void updateIsInWindow(bool isInitialState = false);
void setViewState(WebCore::ViewState::Flags, bool wantsDidUpdateViewState);
+ void setViewStateInternal(WebCore::ViewState::Flags, bool isInitialState);
void validateCommand(const String&, uint64_t);
void executeEditCommand(const String&);
diff --git a/Source/WebKit2/WebProcess/WebProcess.cpp b/Source/WebKit2/WebProcess/WebProcess.cpp
index ad1d614..291ab4a 100644
--- a/Source/WebKit2/WebProcess/WebProcess.cpp
+++ b/Source/WebKit2/WebProcess/WebProcess.cpp
@@ -564,7 +564,8 @@
// Balanced by an enableTermination in removeWebPage.
disableTermination();
- }
+ } else
+ result.iterator->value->reinitializeWebPage(parameters);
ASSERT(result.iterator->value);
}