| // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef CHROME_RENDERER_PRERENDER_PRERENDER_DISPATCHER_H_ |
| #define CHROME_RENDERER_PRERENDER_PRERENDER_DISPATCHER_H_ |
| |
| #include <map> |
| #include <set> |
| #include <vector> |
| |
| #include "base/compiler_specific.h" |
| #include "base/memory/scoped_ptr.h" |
| #include "content/public/renderer/render_process_observer.h" |
| #include "third_party/WebKit/public/platform/WebPrerender.h" |
| #include "third_party/WebKit/public/platform/WebPrerenderingSupport.h" |
| |
| class GURL; |
| |
| namespace prerender { |
| |
| // There is one PrerenderDispatcher per render process. It keeps track of which |
| // prerenders were launched from this renderer, and ensures prerender navigation |
| // is triggered on navigation to those. It implements the prerendering interface |
| // supplied to WebKit. |
| class PrerenderDispatcher : public content::RenderProcessObserver, |
| public blink::WebPrerenderingSupport { |
| public: |
| PrerenderDispatcher(); |
| virtual ~PrerenderDispatcher(); |
| |
| bool IsPrerenderURL(const GURL& url) const; |
| |
| private: |
| friend class PrerenderDispatcherTest; |
| |
| // Message handlers for messages from the browser process. |
| void OnPrerenderStart(int prerender_id); |
| void OnPrerenderStopLoading(int prerender_id); |
| void OnPrerenderDomContentLoaded(int prerender_id); |
| void OnPrerenderAddAlias(const GURL& alias); |
| void OnPrerenderRemoveAliases(const std::vector<GURL>& aliases); |
| void OnPrerenderStop(int prerender_id); |
| |
| // From RenderProcessObserver: |
| virtual bool OnControlMessageReceived(const IPC::Message& message) OVERRIDE; |
| |
| // From WebPrerenderingSupport: |
| virtual void add(const blink::WebPrerender& prerender) OVERRIDE; |
| virtual void cancel(const blink::WebPrerender& prerender) OVERRIDE; |
| virtual void abandon(const blink::WebPrerender& prerender) OVERRIDE; |
| |
| // From WebKit, prerender elements launched by renderers in our process. |
| std::map<int, blink::WebPrerender> prerenders_; |
| |
| // From the browser process, which prerenders are running, indexed by URL. |
| // Updated by the browser processes as aliases are discovered. |
| std::multiset<GURL> running_prerender_urls_; |
| }; |
| |
| } // namespace prerender |
| |
| #endif // CHROME_RENDERER_PRERENDER_PRERENDER_DISPATCHER_H_ |