Home | History | Annotate | Download | only in search
      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 CHROME_BROWSER_SEARCH_INSTANT_IO_CONTEXT_H_
      6 #define CHROME_BROWSER_SEARCH_INSTANT_IO_CONTEXT_H_
      7 
      8 #include <set>
      9 
     10 #include "base/basictypes.h"
     11 #include "base/memory/ref_counted.h"
     12 
     13 class GURL;
     14 
     15 namespace content {
     16 class ResourceContext;
     17 }
     18 
     19 namespace net {
     20 class URLRequest;
     21 }
     22 
     23 // IO thread data held for Instant.  This reflects the data held in
     24 // InstantService for use on the IO thread.  Owned by ResourceContext
     25 // as user data.
     26 class InstantIOContext : public base::RefCountedThreadSafe<InstantIOContext> {
     27  public:
     28   InstantIOContext();
     29 
     30   // Key name for context UserData.  UserData is created by InstantService
     31   // but accessed by InstantIOContext.
     32   static const char kInstantIOContextKeyName[];
     33 
     34   // Installs the |instant_io_context| into the UserData of the
     35   // |resource_context|.
     36   static void SetUserDataOnIO(
     37       content::ResourceContext* resource_context,
     38       scoped_refptr<InstantIOContext> instant_io_context);
     39 
     40   // Add and remove RenderProcessHost IDs that are associated with Instant
     41   // processes.  Used to keep process IDs in sync with InstantService.
     42   static void AddInstantProcessOnIO(
     43       scoped_refptr<InstantIOContext> instant_io_context,
     44       int process_id);
     45   static void RemoveInstantProcessOnIO(
     46       scoped_refptr<InstantIOContext> instant_io_context,
     47       int process_id);
     48   static void ClearInstantProcessesOnIO(
     49       scoped_refptr<InstantIOContext> instant_io_context);
     50 
     51   // Determine if this chrome-search: request is coming from an Instant render
     52   // process.
     53   static bool ShouldServiceRequest(const net::URLRequest* request);
     54 
     55  protected:
     56    virtual ~InstantIOContext();
     57 
     58  private:
     59   friend class base::RefCountedThreadSafe<InstantIOContext>;
     60 
     61   // Check that |process_id| is in the known set of Instant processes, ie.
     62   // |process_ids_|.
     63   bool IsInstantProcess(int process_id) const;
     64 
     65   // The process IDs associated with Instant processes.  Mirror of the process
     66   // IDs in InstantService.  Duplicated here for synchronous access on the IO
     67   // thread.
     68   std::set<int> process_ids_;
     69 
     70   DISALLOW_COPY_AND_ASSIGN(InstantIOContext);
     71 };
     72 
     73 #endif  // CHROME_BROWSER_SEARCH_INSTANT_IO_CONTEXT_H_
     74