Home | History | Annotate | Download | only in test
      1 // Copyright 2013 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef CONTENT_TEST_WEBURL_LOADER_MOCK_FACTORY_H_
      6 #define CONTENT_TEST_WEBURL_LOADER_MOCK_FACTORY_H_
      7 
      8 #include <map>
      9 
     10 #include "base/files/file_path.h"
     11 #include "third_party/WebKit/public/platform/WebURL.h"
     12 #include "third_party/WebKit/public/platform/WebURLError.h"
     13 #include "third_party/WebKit/public/platform/WebURLRequest.h"
     14 #include "third_party/WebKit/public/platform/WebURLResponse.h"
     15 
     16 namespace blink {
     17 class WebData;
     18 class WebURLLoader;
     19 }
     20 
     21 class WebURLLoaderMock;
     22 
     23 // A factory that creates WebURLLoaderMock to simulate resource loading in
     24 // tests.
     25 // You register files for specific URLs, the content of the file is then served
     26 // when these URLs are loaded.
     27 // In order to serve the asynchronous requests, you need to invoke
     28 // ServeAsynchronousRequest.
     29 class WebURLLoaderMockFactory {
     30  public:
     31   WebURLLoaderMockFactory();
     32   virtual ~WebURLLoaderMockFactory();
     33 
     34   // Called by TestWebKitPlatformSupport to create a WebURLLoader.
     35   // Non-mocked request are forwarded to |default_loader| which should not be
     36   // NULL.
     37   virtual blink::WebURLLoader* CreateURLLoader(
     38       blink::WebURLLoader* default_loader);
     39 
     40   // Registers a response and the contents to be served when the specified URL
     41   // is loaded.
     42   void RegisterURL(const blink::WebURL& url,
     43                    const blink::WebURLResponse& response,
     44                    const blink::WebString& filePath);
     45 
     46   // Registers an error to be served when the specified URL is requested.
     47   void RegisterErrorURL(const blink::WebURL& url,
     48                         const blink::WebURLResponse& response,
     49                         const blink::WebURLError& error);
     50 
     51   // Unregisters |url| so it will no longer be mocked.
     52   void UnregisterURL(const blink::WebURL& url);
     53 
     54   // Unregister all URLs so no URL will be mocked anymore.
     55   void UnregisterAllURLs();
     56 
     57   // Serves all the pending asynchronous requests.
     58   void ServeAsynchronousRequests();
     59 
     60   // Returns the last request handled by |ServeAsynchronousRequests()|.
     61   blink::WebURLRequest GetLastHandledAsynchronousRequest();
     62 
     63   // Returns true if |url| was registered for being mocked.
     64   bool IsMockedURL(const blink::WebURL& url);
     65 
     66   // Called by the loader to load a resource.
     67   void LoadSynchronously(const blink::WebURLRequest& request,
     68                          blink::WebURLResponse* response,
     69                          blink::WebURLError* error,
     70                          blink::WebData* data);
     71   void LoadAsynchronouly(const blink::WebURLRequest& request,
     72                          WebURLLoaderMock* loader);
     73 
     74   // Removes the loader from the list of pending loaders.
     75   void CancelLoad(WebURLLoaderMock* loader);
     76 
     77  private:
     78   struct ResponseInfo {
     79     blink::WebURLResponse response;
     80     base::FilePath file_path;
     81   };
     82 
     83 
     84   // Loads the specified request and populates the response, error and data
     85   // accordingly.
     86   void LoadRequest(const blink::WebURLRequest& request,
     87                    blink::WebURLResponse* response,
     88                    blink::WebURLError* error,
     89                    blink::WebData* data);
     90 
     91   // Checks if the loader is pending. Otherwise, it may have been deleted.
     92   bool IsPending(WebURLLoaderMock* loader);
     93 
     94   // Reads |m_filePath| and puts its content in |data|.
     95   // Returns true if it successfully read the file.
     96   static bool ReadFile(const base::FilePath& file_path, blink::WebData* data);
     97 
     98   // The loaders that have not being served data yet.
     99   typedef std::map<WebURLLoaderMock*, blink::WebURLRequest> LoaderToRequestMap;
    100   LoaderToRequestMap pending_loaders_;
    101 
    102   typedef std::map<GURL, blink::WebURLError> URLToErrorMap;
    103   URLToErrorMap url_to_error_info_;
    104 
    105   // Table of the registered URLs and the responses that they should receive.
    106   typedef std::map<GURL, ResponseInfo> URLToResponseMap;
    107   URLToResponseMap url_to_reponse_info_;
    108 
    109   blink::WebURLRequest last_handled_asynchronous_request_;
    110 
    111   DISALLOW_COPY_AND_ASSIGN(WebURLLoaderMockFactory);
    112 };
    113 
    114 #endif  // CONTENT_TEST_WEBURL_LOADER_MOCK_FACTORY_H_
    115 
    116