You are pretty close.

What you want to do is override URLRequestJob::IsRedirectResponse(),
rather than trying to do the redirect in the factory.

Something like this should work:


class URLRequestCustomJob : public URLRequestJob {
 public:
  explicit URLRequestCustomJob(URLRequest* request) : URLRequestJob(request) {}

  // URLRequestJob methods:
  virtual void Start() {
    NotifyHeadersComplete();
  }

  virtual bool IsRedirectResponse(GURL* location, int* http_status_code) {
    *http_status_code = 301;
    *location = GURL("http://i-redirected-you/cuz-im-the-awesome";);
    return true;
  }

  static URLRequestJob* Factory(URLRequest* request, const
std::string& scheme) {
    return new URLRequestCustomJob(request);
  }
};


On Mon, Jul 27, 2009 at 5:44 PM, Kruncher<[email protected]> wrote:
>
> Hi,
>
> I am trying to add a custom scheme to the Chromium browser. I am
> trying to write a scheme that will transparently redirect requests to
> another URL.
>
> For some reason, however, my custom scheme does not appear to get
> recognized. Could somebody tell me what I am doing wrong?
>
> For the time being I have added the following code to the
> "chrome_exe_main.cc" source.
>
> //
> // Added above the main Windows function.
> //
>
> #include "net/url_request/url_request.h"
> #include "net/url_request/url_request_http_job.h"
>
> static const char kCustomURLScheme[] = "my-scheme";
>
>
> class URLRequestCustomJob : public URLRequestJob {
>  public:
>  static URLRequestJob* Factory(URLRequest* request, const
> std::string& scheme) {
>          DCHECK(scheme == "my-scheme");
>
>          // Redirect response to a local network resource.
>          std::string& requestPath = request->url().PathForRequest().replace
> (0, 10, "http://192.168.1.4:8080";);
>
>          // I tried using the following line, but it turns out that the
> "Redirect" function is protected.
>          //request->Redirect(GURL(requestPath), request->status().status());
>          // So instead I am attempting to create a new request.
>          request = new URLRequest(GURL(requestPath), request->delegate());
>
>          // Proceed with regular HTTP scheme factory.
>          return URLRequestHttpJob::Factory(request, "http");
>        }
> };
>
>
> //
> // Added above "#if defined(GOOGLE_CHROME_BUILD)" inside Windows main
> function.
> //
>
> // Register custom scheme:
> url_util::AddStandardScheme(kCustomURLScheme);
> URLRequest::RegisterProtocolFactory(kCustomURLScheme,
> &URLRequestCustomJob::Factory);
>
> Many thanks,
> Lea Hayes
> >
>

--~--~---------~--~----~------------~-------~--~----~
Chromium Developers mailing list: [email protected] 
View archives, change email options, or unsubscribe: 
    http://groups.google.com/group/chromium-dev
-~----------~----~----~----~------~----~------~--~---

Reply via email to