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);
 }