[GTK][EFL][NIX] Do not use PrintContext, Frame and DocumentLoader in Errors
authorcarlosgc@webkit.org <carlosgc@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 16 Jan 2014 07:37:46 +0000 (07:37 +0000)
committercarlosgc@webkit.org <carlosgc@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 16 Jan 2014 07:37:46 +0000 (07:37 +0000)
https://bugs.webkit.org/show_bug.cgi?id=127047

Reviewed by Martin Robinson.

Source/WebCore:

Using PrintContext, Frame and DocumentLoader in platform is a
layering violation.
Change printing error methods to receive a failing URL instead of
receiving a PrintContext that was used only to get the failing
URL.

* platform/efl/ErrorsEfl.cpp:
(WebCore::printError):
(WebCore::printerNotFoundError):
(WebCore::invalidPageRangeToPrint):
* platform/efl/ErrorsEfl.h:
* platform/gtk/ErrorsGtk.cpp:
(WebCore::printError):
(WebCore::printerNotFoundError):
(WebCore::invalidPageRangeToPrint):
* platform/gtk/ErrorsGtk.h:
* platform/nix/ErrorsNix.cpp:
(WebCore::printError):
(WebCore::printerNotFoundError):
(WebCore::invalidPageRangeToPrint):
* platform/nix/ErrorsNix.h:

Source/WebKit2:

* WebProcess/WebPage/gtk/WebPrintOperationGtk.cpp:
(WebKit::WebPrintOperationGtk::frameURL): Helper function to get
the URL of the frame being printed.
(WebKit::WebPrintOperationGtk::print): Use frameURL() as failing
URL for printing errors.
* WebProcess/WebPage/gtk/WebPrintOperationGtk.h:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@162118 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebCore/ChangeLog
Source/WebCore/platform/efl/ErrorsEfl.cpp
Source/WebCore/platform/efl/ErrorsEfl.h
Source/WebCore/platform/gtk/ErrorsGtk.cpp
Source/WebCore/platform/gtk/ErrorsGtk.h
Source/WebCore/platform/nix/ErrorsNix.cpp
Source/WebCore/platform/nix/ErrorsNix.h
Source/WebKit2/ChangeLog
Source/WebKit2/WebProcess/WebPage/gtk/WebPrintOperationGtk.cpp
Source/WebKit2/WebProcess/WebPage/gtk/WebPrintOperationGtk.h

index 85d433a..6dea059 100644 (file)
@@ -1,3 +1,32 @@
+2014-01-15  Carlos Garcia Campos  <cgarcia@igalia.com>
+
+        [GTK][EFL][NIX] Do not use PrintContext, Frame and DocumentLoader in Errors
+        https://bugs.webkit.org/show_bug.cgi?id=127047
+
+        Reviewed by Martin Robinson.
+
+        Using PrintContext, Frame and DocumentLoader in platform is a
+        layering violation.
+        Change printing error methods to receive a failing URL instead of
+        receiving a PrintContext that was used only to get the failing
+        URL.
+
+        * platform/efl/ErrorsEfl.cpp:
+        (WebCore::printError):
+        (WebCore::printerNotFoundError):
+        (WebCore::invalidPageRangeToPrint):
+        * platform/efl/ErrorsEfl.h:
+        * platform/gtk/ErrorsGtk.cpp:
+        (WebCore::printError):
+        (WebCore::printerNotFoundError):
+        (WebCore::invalidPageRangeToPrint):
+        * platform/gtk/ErrorsGtk.h:
+        * platform/nix/ErrorsNix.cpp:
+        (WebCore::printError):
+        (WebCore::printerNotFoundError):
+        (WebCore::invalidPageRangeToPrint):
+        * platform/nix/ErrorsNix.h:
+
 2014-01-15  Mihnea Ovidenie  <mihnea@adobe.com>
 
         [CSS Regions] Enable accelerated compositing for fixed elements in named flows
index da2e23d..edc908d 100644 (file)
 #include "config.h"
 #include "ErrorsEfl.h"
 
-#include "DocumentLoader.h"
-#include "Frame.h"
-#include "FrameLoader.h"
-#include "PrintContext.h"
 #include "ResourceError.h"
 #include "ResourceRequest.h"
 #include "ResourceResponse.h"
@@ -86,25 +82,19 @@ ResourceError downloadDestinationError(const ResourceResponse& response, const S
     return ResourceError(errorDomainDownload, DownloadErrorDestination, response.url().string(), errorMessage);
 }
 
-ResourceError printError(const PrintContext* printContext, const String& errorMessage)
+ResourceError printError(const URL& failingURL, const String& errorMessage)
 {
-    DocumentLoader* documentLoader = printContext->frame()->loader().documentLoader();
-
-    return ResourceError(errorDomainPrint, PrintErrorGeneral, documentLoader ? documentLoader->url() : URL(), errorMessage);
+    return ResourceError(errorDomainPrint, PrintErrorGeneral, failingURL, errorMessage);
 }
 
-ResourceError printerNotFoundError(const PrintContext* printContext)
+ResourceError printerNotFoundError(const URL& failingURL)
 {
-    DocumentLoader* documentLoader = printContext->frame()->loader().documentLoader();
-
-    return ResourceError(errorDomainPrint, PrintErrorPrinterNotFound, documentLoader ? documentLoader->url() : URL(), ASCIILiteral("Printer not found"));
+    return ResourceError(errorDomainPrint, PrintErrorPrinterNotFound, failingURL, ASCIILiteral("Printer not found"));
 }
 
-ResourceError invalidPageRangeToPrint(const PrintContext* printContext)
+ResourceError invalidPageRangeToPrint(const URL& failingURL)
 {
-    DocumentLoader* documentLoader = printContext->frame()->loader().documentLoader();
-
-    return ResourceError(errorDomainPrint, PrintErrorInvalidPageRange, documentLoader ? documentLoader->url() : URL(), ASCIILiteral("Invalid page range"));
+    return ResourceError(errorDomainPrint, PrintErrorInvalidPageRange, failingURL, ASCIILiteral("Invalid page range"));
 }
 
 } // namespace WebCore
index 029f0d6..147baff 100644 (file)
 
 namespace WebCore {
 
-class PrintContext;
 class ResourceError;
 class ResourceRequest;
 class ResourceResponse;
+class URL;
 
 static const char errorDomainNetwork[] = "WebKitNetworkError";
 static const char errorDomainPolicy[] = "WebKitPolicyError";
@@ -90,9 +90,9 @@ ResourceError pluginWillHandleLoadError(const ResourceResponse&);
 ResourceError downloadNetworkError(const ResourceError&);
 ResourceError downloadCancelledByUserError(const ResourceResponse&);
 ResourceError downloadDestinationError(const ResourceResponse&, const String& errorMessage);
-ResourceError printError(const PrintContext*, const String& errorMessage);
-ResourceError printerNotFoundError(const PrintContext*);
-ResourceError invalidPageRangeToPrint(const PrintContext*);
+ResourceError printError(const URL& failingURL, const String& errorMessage);
+ResourceError printerNotFoundError(const URL& failingURL);
+ResourceError invalidPageRangeToPrint(const URL& failingURL);
 
 }
 
index 3cf6b00..6955814 100644 (file)
 #include "config.h"
 #include "ErrorsGtk.h"
 
-#include "DocumentLoader.h"
-#include "Frame.h"
-#include "FrameLoader.h"
-#include "PrintContext.h"
 #include "ResourceError.h"
 #include "ResourceRequest.h"
 #include "ResourceResponse.h"
@@ -91,25 +87,19 @@ ResourceError downloadDestinationError(const ResourceResponse& response, const S
                          response.url().string(), errorMessage);
 }
 
-ResourceError printError(const PrintContext* printContext, const String& errorMessage)
+ResourceError printError(const URL& failingURL, const String& errorMessage)
 {
-    DocumentLoader* documentLoader = printContext->frame()->loader().documentLoader();
-    return ResourceError(errorDomainPrint, PrintErrorGeneral,
-                         documentLoader ? documentLoader->url() : URL(), errorMessage);
+    return ResourceError(errorDomainPrint, PrintErrorGeneral, failingURL, errorMessage);
 }
 
-ResourceError printerNotFoundError(const PrintContext* printContext)
+ResourceError printerNotFoundError(const URL& failingURL)
 {
-    DocumentLoader* documentLoader = printContext->frame()->loader().documentLoader();
-    return ResourceError(errorDomainPrint, PrintErrorPrinterNotFound,
-                         documentLoader ? documentLoader->url() : URL(), _("Printer not found"));
+    return ResourceError(errorDomainPrint, PrintErrorPrinterNotFound, failingURL, _("Printer not found"));
 }
 
-ResourceError invalidPageRangeToPrint(const PrintContext* printContext)
+ResourceError invalidPageRangeToPrint(const URL& failingURL)
 {
-    DocumentLoader* documentLoader = printContext->frame()->loader().documentLoader();
-    return ResourceError(errorDomainPrint, PrintErrorInvalidPageRange,
-                         documentLoader ? documentLoader->url() : URL(), _("Invalid page range"));
+    return ResourceError(errorDomainPrint, PrintErrorInvalidPageRange, failingURL, _("Invalid page range"));
 }
 
 } // namespace WebCore
index 582cc99..0c14718 100644 (file)
 
 namespace WebCore {
 
-class PrintContext;
 class ResourceError;
 class ResourceRequest;
 class ResourceResponse;
+class URL;
 
 const char* const errorDomainNetwork = "WebKitNetworkError";
 const char* const errorDomainPolicy = "WebKitPolicyError";
@@ -83,9 +83,9 @@ ResourceError pluginWillHandleLoadError(const ResourceResponse&);
 ResourceError downloadNetworkError(const ResourceError&);
 ResourceError downloadCancelledByUserError(const ResourceResponse&);
 ResourceError downloadDestinationError(const ResourceResponse&, const String& errorMessage);
-ResourceError printError(const PrintContext*, const String& errorMessage);
-ResourceError printerNotFoundError(const PrintContext*);
-ResourceError invalidPageRangeToPrint(const PrintContext*);
+ResourceError printError(const URL& failingURL, const String& errorMessage);
+ResourceError printerNotFoundError(const URL& failingURL);
+ResourceError invalidPageRangeToPrint(const URL& failingURL);
 
 }
 
index 4929be4..a994b56 100644 (file)
@@ -27,9 +27,6 @@
 #include "config.h"
 #include "ErrorsNix.h"
 
-#include "DocumentLoader.h"
-#include "Frame.h"
-#include "PrintContext.h"
 #include "ResourceError.h"
 #include "ResourceRequest.h"
 #include "ResourceResponse.h"
@@ -86,25 +83,19 @@ ResourceError downloadDestinationError(const ResourceResponse& response, const S
     return ResourceError(errorDomainDownload, DownloadErrorDestination, response.url().string(), errorMessage);
 }
 
-ResourceError printError(const PrintContext* printContext, const String& errorMessage)
+ResourceError printError(const URL& failingURL, const String& errorMessage)
 {
-    DocumentLoader* documentLoader = printContext->frame()->loader().documentLoader();
-
-    return ResourceError(errorDomainPrint, PrintErrorGeneral, documentLoader ? documentLoader->url() : URL(), errorMessage);
+    return ResourceError(errorDomainPrint, PrintErrorGeneral, failingURL, errorMessage);
 }
 
-ResourceError printerNotFoundError(const PrintContext* printContext)
+ResourceError printerNotFoundError(const URL& failingURL)
 {
-    DocumentLoader* documentLoader = printContext->frame()->loader().documentLoader();
-
-    return ResourceError(errorDomainPrint, PrintErrorPrinterNotFound, documentLoader ? documentLoader->url() : URL(), ASCIILiteral("Printer not found"));
+    return ResourceError(errorDomainPrint, PrintErrorPrinterNotFound, failingURL, ASCIILiteral("Printer not found"));
 }
 
-ResourceError invalidPageRangeToPrint(const PrintContext* printContext)
+ResourceError invalidPageRangeToPrint(const URL& failingURL)
 {
-    DocumentLoader* documentLoader = printContext->frame()->loader().documentLoader();
-
-    return ResourceError(errorDomainPrint, PrintErrorInvalidPageRange, documentLoader ? documentLoader->url() : URL(), ASCIILiteral("Invalid page range"));
+    return ResourceError(errorDomainPrint, PrintErrorInvalidPageRange, failingURL, ASCIILiteral("Invalid page range"));
 }
 
 } // namespace WebCore
index c71b0ec..1e95b1d 100644 (file)
 
 namespace WebCore {
 
-class PrintContext;
 class ResourceError;
 class ResourceRequest;
 class ResourceResponse;
+class URL;
 
 static const char errorDomainNetwork[] = "WebKitNetworkError";
 static const char errorDomainPolicy[] = "WebKitPolicyError";
@@ -91,9 +91,9 @@ ResourceError pluginWillHandleLoadError(const ResourceResponse&);
 ResourceError downloadNetworkError(const ResourceError&);
 ResourceError downloadCancelledByUserError(const ResourceResponse&);
 ResourceError downloadDestinationError(const ResourceResponse&, const String& errorMessage);
-ResourceError printError(const PrintContext*, const String& errorMessage);
-ResourceError printerNotFoundError(const PrintContext*);
-ResourceError invalidPageRangeToPrint(const PrintContext*);
+ResourceError printError(const URL& failingURL, const String& errorMessage);
+ResourceError printerNotFoundError(const URL& failingURL);
+ResourceError invalidPageRangeToPrint(const URL& failingURL);
 
 } // namespace WebCore
 
index f20bef1..b17c2ba 100644 (file)
@@ -1,3 +1,17 @@
+2014-01-15  Carlos Garcia Campos  <cgarcia@igalia.com>
+
+        [GTK][EFL][NIX] Do not use PrintContext, Frame and DocumentLoader in Errors
+        https://bugs.webkit.org/show_bug.cgi?id=127047
+
+        Reviewed by Martin Robinson.
+
+        * WebProcess/WebPage/gtk/WebPrintOperationGtk.cpp:
+        (WebKit::WebPrintOperationGtk::frameURL): Helper function to get
+        the URL of the frame being printed.
+        (WebKit::WebPrintOperationGtk::print): Use frameURL() as failing
+        URL for printing errors.
+        * WebProcess/WebPage/gtk/WebPrintOperationGtk.h:
+
 2014-01-15  Benjamin Poulain  <bpoulain@apple.com>
 
         Move user agent code to WebCore and unify some code between OS X and iOS
index 7f750e8..b1eb155 100644 (file)
 #include "WebCoreArgumentCoders.h"
 #include "WebPage.h"
 #include "WebPageProxyMessages.h"
+#include <WebCore/DocumentLoader.h>
 #include <WebCore/ErrorsGtk.h>
+#include <WebCore/Frame.h>
 #include <WebCore/IntRect.h>
 #include <WebCore/NotImplemented.h>
 #include <WebCore/PlatformContextCairo.h>
 #include <WebCore/PrintContext.h>
 #include <WebCore/ResourceError.h>
+#include <WebCore/URL.h>
 #include <gtk/gtk.h>
 #include <wtf/Vector.h>
 #include <wtf/gobject/GOwnPtr.h>
@@ -66,7 +69,7 @@ public:
         const char* printerName = gtk_print_settings_get_printer(m_printSettings.get());
         GtkPrinter* printer = printerName ? printerList->findPrinter(printerName) : printerList->defaultPrinter();
         if (!printer) {
-            printDone(printerNotFoundError(m_printContext));
+            printDone(printerNotFoundError(frameURL()));
             return;
         }
 
@@ -78,7 +81,7 @@ public:
         GOwnPtr<GError> error;
         cairo_surface_t* surface = gtk_print_job_get_surface(m_printJob.get(), &error.outPtr());
         if (!surface) {
-            printDone(printError(m_printContext, error->message));
+            printDone(printError(frameURL(), error->message));
             return;
         }
 
@@ -137,7 +140,7 @@ public:
 
     static void printJobComplete(GtkPrintJob* printJob, WebPrintOperationGtkUnix* printOperation, const GError* error)
     {
-        printOperation->printDone(error ? printError(printOperation->m_printContext, error->message) : WebCore::ResourceError());
+        printOperation->printDone(error ? printError(printOperation->frameURL(), error->message) : WebCore::ResourceError());
         printOperation->m_printJob = 0;
     }
 
@@ -427,6 +430,15 @@ bool WebPrintOperationGtk::currentPageIsLastPageOfSheet() const
     return (m_numberUp < 2 || !((m_pagePosition + 1) % m_numberUp) || m_pagePosition == m_numberOfPagesToPrint - 1);
 }
 
+WebCore::URL WebPrintOperationGtk::frameURL() const
+{
+    if (!m_printContext)
+        return WebCore::URL();
+
+    WebCore::DocumentLoader* documentLoader = m_printContext->frame()->loader().documentLoader();
+    return documentLoader ? documentLoader->url() : WebCore::URL();
+}
+
 void WebPrintOperationGtk::rotatePageIfNeeded()
 {
     if (!m_needsRotation)
@@ -693,7 +705,7 @@ void WebPrintOperationGtk::print(cairo_surface_t* surface, double xDPI, double y
     OwnPtr<PrintPagesData> data = adoptPtr(new PrintPagesData(this));
     if (!data->isValid) {
         cairo_surface_finish(surface);
-        printDone(invalidPageRangeToPrint(m_printContext));
+        printDone(invalidPageRangeToPrint(frameURL()));
         return;
     }
 
index a884039..438f347 100644 (file)
@@ -39,6 +39,7 @@ typedef struct _GtkPageRange GtkPageRange;
 namespace WebCore {
 class PrintContext;
 class ResourceError;
+class URL;
 };
 
 namespace WebKit {
@@ -92,6 +93,7 @@ protected:
     void prepareContextToDraw();
     void printPagesDone();
     void printDone(const WebCore::ResourceError&);
+    WebCore::URL frameURL() const;
 
     WebPage* m_webPage;
     GRefPtr<GtkPrintSettings> m_printSettings;