Title: [135197] trunk/Source/WebKit/chromium
Revision
135197
Author
[email protected]
Date
2012-11-19 14:22:34 -0800 (Mon, 19 Nov 2012)

Log Message

[Chromium] Remove the dependency of INPUT_TYPE_COLOR on PAGE_POPUP
https://bugs.webkit.org/show_bug.cgi?id=102525

Patch by Miguel Garcia <[email protected]> on 2012-11-19
Reviewed by Kent Tamura.

INPUT_TYPE_COLOR should not depend on PAGE_POPUP, with this change we allow platforms like android to implement the former without depending on the latter.

Tested by compiling chromium with and without ENABLE_PAGE_POPUP and made sure that forms with input type color would load in both cases.

* WebKit.gyp:
* src/ChromeClientImpl.cpp:
(WebKit::ChromeClientImpl::createColorChooser):
* src/ColorChooserUIController.cpp:
(WebKit::ColorChooserUIController::ColorChooserUIController):
(WebKit::ColorChooserUIController::openUI):
(WebKit):
(WebKit::ColorChooserUIController::endChooser):
* src/ColorChooserUIController.h:
(ColorChooserUIController):

Modified Paths

Added Paths

Diff

Modified: trunk/Source/WebKit/chromium/ChangeLog (135196 => 135197)


--- trunk/Source/WebKit/chromium/ChangeLog	2012-11-19 22:20:08 UTC (rev 135196)
+++ trunk/Source/WebKit/chromium/ChangeLog	2012-11-19 22:22:34 UTC (rev 135197)
@@ -1,3 +1,25 @@
+2012-11-19  Miguel Garcia  <[email protected]>
+
+        [Chromium] Remove the dependency of INPUT_TYPE_COLOR on PAGE_POPUP
+        https://bugs.webkit.org/show_bug.cgi?id=102525
+
+        Reviewed by Kent Tamura.
+
+        INPUT_TYPE_COLOR should not depend on PAGE_POPUP, with this change we allow platforms like android to implement the former without depending on the latter.
+
+        Tested by compiling chromium with and without ENABLE_PAGE_POPUP and made sure that forms with input type color would load in both cases.
+
+        * WebKit.gyp:
+        * src/ChromeClientImpl.cpp:
+        (WebKit::ChromeClientImpl::createColorChooser):
+        * src/ColorChooserUIController.cpp:
+        (WebKit::ColorChooserUIController::ColorChooserUIController):
+        (WebKit::ColorChooserUIController::openUI):
+        (WebKit):
+        (WebKit::ColorChooserUIController::endChooser):
+        * src/ColorChooserUIController.h:
+        (ColorChooserUIController):
+
 2012-11-19  Alpha Lam  <[email protected]>
 
         [chromium] Lazy image decoding without cache

Modified: trunk/Source/WebKit/chromium/WebKit.gyp (135196 => 135197)


--- trunk/Source/WebKit/chromium/WebKit.gyp	2012-11-19 22:20:08 UTC (rev 135196)
+++ trunk/Source/WebKit/chromium/WebKit.gyp	2012-11-19 22:22:34 UTC (rev 135197)
@@ -362,6 +362,8 @@
                 'src/DateTimeChooserImpl.h',
                 'src/ChromeClientImpl.cpp',
                 'src/ChromeClientImpl.h',
+                'src/ColorChooserPopupUIController.cpp',
+                'src/ColorChooserPopupUIController.h',
                 'src/ColorChooserUIController.cpp',
                 'src/ColorChooserUIController.h',
                 'src/CompositionUnderlineBuilder.h',

Modified: trunk/Source/WebKit/chromium/src/ChromeClientImpl.cpp (135196 => 135197)


--- trunk/Source/WebKit/chromium/src/ChromeClientImpl.cpp	2012-11-19 22:20:08 UTC (rev 135196)
+++ trunk/Source/WebKit/chromium/src/ChromeClientImpl.cpp	2012-11-19 22:22:34 UTC (rev 135197)
@@ -37,8 +37,12 @@
 #if ENABLE(INPUT_TYPE_COLOR)
 #include "ColorChooser.h"
 #include "ColorChooserClient.h"
+#if ENABLE(PAGE_POPUP)
+#include "ColorChooserPopupUIController.h"
+#else
 #include "ColorChooserUIController.h"
 #endif
+#endif
 #include "Console.h"
 #include "Cursor.h"
 #include "DatabaseTracker.h"
@@ -677,7 +681,14 @@
 #if ENABLE(INPUT_TYPE_COLOR)
 PassOwnPtr<ColorChooser> ChromeClientImpl::createColorChooser(ColorChooserClient* chooserClient, const Color&)
 {
-    return adoptPtr(new ColorChooserUIController(this, chooserClient));
+    OwnPtr<ColorChooserUIController> controller;
+#if ENABLE(PAGE_POPUP)
+    controller = adoptPtr(new ColorChooserPopupUIController(this, chooserClient));
+#else
+    controller = adoptPtr(new ColorChooserUIController(this, chooserClient));
+#endif
+    controller->openUI();
+    return controller.release();
 }
 PassOwnPtr<WebColorChooser> ChromeClientImpl::createWebColorChooser(WebColorChooserClient* chooserClient, const WebColor& initialColor)
 {

Copied: trunk/Source/WebKit/chromium/src/ColorChooserPopupUIController.cpp (from rev 135196, trunk/Source/WebKit/chromium/src/ColorChooserUIController.cpp) (0 => 135197)


--- trunk/Source/WebKit/chromium/src/ColorChooserPopupUIController.cpp	                        (rev 0)
+++ trunk/Source/WebKit/chromium/src/ColorChooserPopupUIController.cpp	2012-11-19 22:22:34 UTC (rev 135197)
@@ -0,0 +1,157 @@
+/*
+ * Copyright (C) 2012 Google Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1.  Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ * 2.  Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in the
+ *     documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "ColorChooserPopupUIController.h"
+
+#if ENABLE(INPUT_TYPE_COLOR) && ENABLE(PAGE_POPUP)
+#include "ChromeClientImpl.h"
+#include "ColorChooserClient.h"
+#include "ColorSuggestionPicker.h"
+#include "FrameView.h"
+#include "IntRect.h"
+#include "LocalizedStrings.h"
+#include "PickerCommon.h"
+#include "WebColorChooser.h"
+#include "WebViewImpl.h"
+#include <public/Platform.h>
+#include <public/WebLocalizedString.h>
+
+using namespace WebCore;
+
+namespace WebKit {
+
+// Keep in sync with Actions in colorSuggestionPicker.js.
+enum ColorPickerPopupAction {
+    ColorPickerPopupActionChooseOtherColor = -2,
+    ColorPickerPopupActionCancel = -1,
+    ColorPickerPopupActionSetValue = 0
+};
+
+ColorChooserPopupUIController::ColorChooserPopupUIController(ChromeClientImpl* chromeClient, ColorChooserClient* client)
+    : ColorChooserUIController(chromeClient, client)
+    , m_chromeClient(chromeClient)
+    , m_client(client)
+    , m_popup(0)
+    , m_locale(Locale::createDefault())
+{
+}
+
+ColorChooserPopupUIController::~ColorChooserPopupUIController()
+{
+}
+
+void ColorChooserPopupUIController::openUI()
+{
+    if (m_client->shouldShowSuggestions())
+        openPopup();
+    else
+        openColorChooser();
+}
+
+void ColorChooserPopupUIController::endChooser()
+{
+    if (m_chooser)
+        m_chooser->endChooser();
+    if (m_popup)
+        closePopup();
+}
+
+IntSize ColorChooserPopupUIController::contentSize()
+{
+    return IntSize(0, 0);
+}
+
+void ColorChooserPopupUIController::writeDocument(DocumentWriter& writer)
+{
+    Vector<Color> suggestions = m_client->suggestions();
+    Vector<String> suggestionValues;
+    for (unsigned i = 0; i < suggestions.size(); i++)
+        suggestionValues.append(suggestions[i].serialized());
+    IntRect anchorRectInScreen = m_chromeClient->rootViewToScreen(m_client->elementRectRelativeToRootView());
+    FrameView* view = static_cast<WebViewImpl*>(m_chromeClient->webView())->page()->mainFrame()->view();
+    IntRect rootViewVisibleContentRect = view->visibleContentRect(true /* include scrollbars */);
+    IntRect rootViewRectInScreen = m_chromeClient->rootViewToScreen(rootViewVisibleContentRect);
+
+    PagePopupClient::addString("<!DOCTYPE html><head><meta charset='UTF-8'><style>\n", writer);
+    writer.addData(pickerCommonCss, sizeof(pickerCommonCss));
+    writer.addData(colorSuggestionPickerCss, sizeof(colorSuggestionPickerCss));
+    PagePopupClient::addString("</style></head><body><div id=main>Loading...</div><script>\n"
+        "window.dialogArguments = {\n", writer);
+    PagePopupClient::addProperty("values", suggestionValues, writer);
+    PagePopupClient::addProperty("otherColorLabel", Platform::current()->queryLocalizedString(WebLocalizedString::OtherColorLabel), writer);
+    addProperty("anchorRectInScreen", anchorRectInScreen, writer);
+    addProperty("rootViewRectInScreen", rootViewRectInScreen, writer);
+#if OS(MAC_OS_X)
+    addProperty("confineToRootView", true, writer);
+#else
+    addProperty("confineToRootView", false, writer);
+#endif
+    PagePopupClient::addString("};\n", writer);
+    writer.addData(pickerCommonJs, sizeof(pickerCommonJs));
+    writer.addData(colorSuggestionPickerJs, sizeof(colorSuggestionPickerJs));
+    PagePopupClient::addString("</script></body>\n", writer);
+}
+
+Locale& ColorChooserPopupUIController::locale()
+{
+    return *m_locale;
+}
+
+void ColorChooserPopupUIController::setValueAndClosePopup(int numValue, const String& stringValue)
+{
+    ASSERT(m_popup);
+    ASSERT(m_client);
+    if (numValue == ColorPickerPopupActionSetValue)
+        m_client->didChooseColor(Color(stringValue));
+    if (numValue == ColorPickerPopupActionChooseOtherColor)
+        openColorChooser();
+    closePopup();
+}
+
+void ColorChooserPopupUIController::didClosePopup()
+{
+    m_popup = 0;
+
+    if (!m_chooser)
+        didEndChooser();
+}
+
+
+void ColorChooserPopupUIController::openPopup()
+{
+    ASSERT(!m_popup);
+    m_popup = m_chromeClient->openPagePopup(this, m_client->elementRectRelativeToRootView());
+}
+
+void ColorChooserPopupUIController::closePopup()
+{
+    if (!m_popup)
+        return;
+    m_chromeClient->closePagePopup(m_popup);
+}
+
+}
+#endif // ENABLE(INPUT_TYPE_COLOR) && ENABLE(PAGE_POPUP)

Copied: trunk/Source/WebKit/chromium/src/ColorChooserPopupUIController.h (from rev 135196, trunk/Source/WebKit/chromium/src/ColorChooserUIController.h) (0 => 135197)


--- trunk/Source/WebKit/chromium/src/ColorChooserPopupUIController.h	                        (rev 0)
+++ trunk/Source/WebKit/chromium/src/ColorChooserPopupUIController.h	2012-11-19 22:22:34 UTC (rev 135197)
@@ -0,0 +1,72 @@
+/*
+ * Copyright (C) 2011 Google Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1.  Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ * 2.  Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in the
+ *     documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#ifndef ColorChooserPopupUIController_h
+#define ColorChooserPopupUIController_h
+
+#if ENABLE(INPUT_TYPE_COLOR) && ENABLE(PAGE_POPUP)
+#include "ColorChooserUIController.h"
+#include "PagePopupClient.h"
+#include <wtf/OwnPtr.h>
+
+namespace WebCore {
+class ColorChooserClient;
+class PagePopup;
+}
+
+namespace WebKit {
+
+class ColorChooserPopupUIController : public ColorChooserUIController, public WebCore::PagePopupClient  {
+
+public:
+    ColorChooserPopupUIController(ChromeClientImpl*, WebCore::ColorChooserClient*);
+    virtual ~ColorChooserPopupUIController();
+
+    // ColorChooserUIController functions:
+    virtual void openUI() OVERRIDE;
+
+    // ColorChooser functions
+    void endChooser() OVERRIDE;
+
+    // PagePopupClient functions:
+    virtual WebCore::IntSize contentSize() OVERRIDE;
+    virtual void writeDocument(WebCore::DocumentWriter&) OVERRIDE;
+    virtual WebCore::Locale& locale() OVERRIDE;
+    virtual void setValueAndClosePopup(int, const String&) OVERRIDE;
+    virtual void didClosePopup() OVERRIDE;
+
+private:
+    void openPopup();
+    void closePopup();
+
+    ChromeClientImpl* m_chromeClient;
+    WebCore::ColorChooserClient* m_client;
+    WebCore::PagePopup* m_popup;
+    OwnPtr<WebCore::Locale> m_locale;
+};
+}
+
+#endif // ENABLE(INPUT_TYPE_COLOR) && ENABLE(PAGE_POPUP)
+
+#endif // ColorChooserPopupUIController_h

Modified: trunk/Source/WebKit/chromium/src/ColorChooserUIController.cpp (135196 => 135197)


--- trunk/Source/WebKit/chromium/src/ColorChooserUIController.cpp	2012-11-19 22:20:08 UTC (rev 135196)
+++ trunk/Source/WebKit/chromium/src/ColorChooserUIController.cpp	2012-11-19 22:22:34 UTC (rev 135197)
@@ -27,48 +27,32 @@
 #include "ColorChooserUIController.h"
 
 #if ENABLE(INPUT_TYPE_COLOR)
-
 #include "ChromeClientImpl.h"
 #include "Color.h"
 #include "ColorChooserClient.h"
-#include "ColorSuggestionPicker.h"
-#include "FrameView.h"
-#include "IntRect.h"
-#include "LocalizedStrings.h"
-#include "PickerCommon.h"
 #include "WebColorChooser.h"
-#include "WebViewImpl.h"
-#include <public/Platform.h>
 #include <public/WebColor.h>
-#include <public/WebLocalizedString.h>
 
 using namespace WebCore;
 
 namespace WebKit {
 
-// Keep in sync with Actions in colorSuggestionPicker.js.
-enum ColorPickerPopupAction {
-    ColorPickerPopupActionChooseOtherColor = -2,
-    ColorPickerPopupActionCancel = -1,
-    ColorPickerPopupActionSetValue = 0
-};
 
 ColorChooserUIController::ColorChooserUIController(ChromeClientImpl* chromeClient, ColorChooserClient* client)
     : m_chromeClient(chromeClient)
     , m_client(client)
-    , m_popup(0)
-    , m_locale(Locale::createDefault())
 {
-    if (m_client->shouldShowSuggestions())
-        openPopup();
-    else
-        openColorChooser();
 }
 
 ColorChooserUIController::~ColorChooserUIController()
 {
 }
 
+void ColorChooserUIController::openUI()
+{
+    openColorChooser();
+}
+
 void ColorChooserUIController::setSelectedColor(const Color& color)
 {
     ASSERT(m_chooser);
@@ -79,8 +63,6 @@
 {
     if (m_chooser)
         m_chooser->endChooser();
-    if (m_popup)
-        closePopup();
 }
 
 void ColorChooserUIController::didChooseColor(const WebColor& color)
@@ -96,79 +78,6 @@
     m_client->didEndChooser();
 }
 
-IntSize ColorChooserUIController::contentSize()
-{
-    return IntSize(0, 0);
-}
-
-void ColorChooserUIController::writeDocument(DocumentWriter& writer)
-{
-    Vector<Color> suggestions = m_client->suggestions();
-    Vector<String> suggestionValues;
-    for (unsigned i = 0; i < suggestions.size(); i++)
-        suggestionValues.append(suggestions[i].serialized());
-    IntRect anchorRectInScreen = m_chromeClient->rootViewToScreen(m_client->elementRectRelativeToRootView());
-    FrameView* view = static_cast<WebViewImpl*>(m_chromeClient->webView())->page()->mainFrame()->view();
-    IntRect rootViewVisibleContentRect = view->visibleContentRect(true /* include scrollbars */);
-    IntRect rootViewRectInScreen = m_chromeClient->rootViewToScreen(rootViewVisibleContentRect);
-    
-    PagePopupClient::addString("<!DOCTYPE html><head><meta charset='UTF-8'><style>\n", writer);
-    writer.addData(pickerCommonCss, sizeof(pickerCommonCss));
-    writer.addData(colorSuggestionPickerCss, sizeof(colorSuggestionPickerCss));
-    PagePopupClient::addString("</style></head><body><div id=main>Loading...</div><script>\n"
-                                      "window.dialogArguments = {\n", writer);
-    PagePopupClient::addProperty("values", suggestionValues, writer);       
-    PagePopupClient::addProperty("otherColorLabel", Platform::current()->queryLocalizedString(WebLocalizedString::OtherColorLabel), writer);
-    addProperty("anchorRectInScreen", anchorRectInScreen, writer);
-    addProperty("rootViewRectInScreen", rootViewRectInScreen, writer);
-#if OS(MAC_OS_X)
-    addProperty("confineToRootView", true, writer);
-#else
-    addProperty("confineToRootView", false, writer);
-#endif
-    PagePopupClient::addString("};\n", writer);
-    writer.addData(pickerCommonJs, sizeof(pickerCommonJs));
-    writer.addData(colorSuggestionPickerJs, sizeof(colorSuggestionPickerJs));
-    PagePopupClient::addString("</script></body>\n", writer);
-}
-
-Locale& ColorChooserUIController::locale()
-{
-    return *m_locale;
-}
-
-void ColorChooserUIController::setValueAndClosePopup(int numValue, const String& stringValue)
-{
-    ASSERT(m_popup);
-    ASSERT(m_client);
-    if (numValue == ColorPickerPopupActionSetValue)
-        m_client->didChooseColor(Color(stringValue));
-    if (numValue == ColorPickerPopupActionChooseOtherColor)
-        openColorChooser();
-    closePopup();
-}
-
-void ColorChooserUIController::didClosePopup()
-{
-    m_popup = 0;
-
-    if (!m_chooser)
-        didEndChooser();
-}
-
-void ColorChooserUIController::openPopup()
-{
-    ASSERT(!m_popup);
-    m_popup = m_chromeClient->openPagePopup(this, m_client->elementRectRelativeToRootView());
-}
-
-void ColorChooserUIController::closePopup()
-{
-    if (!m_popup)
-        return;
-    m_chromeClient->closePagePopup(m_popup);
-}
-
 void ColorChooserUIController::openColorChooser()
 {
     ASSERT(!m_chooser);

Modified: trunk/Source/WebKit/chromium/src/ColorChooserUIController.h (135196 => 135197)


--- trunk/Source/WebKit/chromium/src/ColorChooserUIController.h	2012-11-19 22:20:08 UTC (rev 135196)
+++ trunk/Source/WebKit/chromium/src/ColorChooserUIController.h	2012-11-19 22:22:34 UTC (rev 135197)
@@ -29,15 +29,12 @@
 #if ENABLE(INPUT_TYPE_COLOR)
 
 #include "ColorChooser.h"
-#include "PagePopupClient.h"
 #include "PlatformLocale.h"
 #include "WebColorChooserClient.h"
 #include <wtf/OwnPtr.h>
-#include <wtf/PassOwnPtr.h>
 
 namespace WebCore {
 class ColorChooserClient;
-class PagePopup;
 }
 
 namespace WebKit {
@@ -45,11 +42,13 @@
 class ChromeClientImpl;
 class WebColorChooser;
 
-class ColorChooserUIController : public WebColorChooserClient, public WebCore::ColorChooser, public WebCore::PagePopupClient {
+class ColorChooserUIController : public WebColorChooserClient, public WebCore::ColorChooser {
 public:
     ColorChooserUIController(ChromeClientImpl*, WebCore::ColorChooserClient*);
     virtual ~ColorChooserUIController();
 
+    virtual void openUI();
+
     // ColorChooser functions:
     virtual void setSelectedColor(const WebCore::Color&) OVERRIDE;
     virtual void endChooser() OVERRIDE;
@@ -58,23 +57,14 @@
     virtual void didChooseColor(const WebColor&) OVERRIDE;
     virtual void didEndChooser() OVERRIDE;
 
-    // PagePopupClient functions:
-    virtual WebCore::IntSize contentSize() OVERRIDE;
-    virtual void writeDocument(WebCore::DocumentWriter&) OVERRIDE;
-    virtual WebCore::Locale& locale() OVERRIDE;
-    virtual void setValueAndClosePopup(int, const String&) OVERRIDE;
-    virtual void didClosePopup() OVERRIDE;
+protected:
+    void openColorChooser();
+    OwnPtr<WebColorChooser> m_chooser;
 
 private:
-    void openPopup();
-    void closePopup();
-    void openColorChooser();
 
     ChromeClientImpl* m_chromeClient;
     WebCore::ColorChooserClient* m_client;
-    OwnPtr<WebColorChooser> m_chooser;
-    WebCore::PagePopup* m_popup;
-    OwnPtr<WebCore::Locale> m_locale;
 };
 
 }
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to