// Copyright 2015 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_BROWSER_RENDERER_HOST_THREAD_HOP_RESOURCE_THROTTLE_H_ #define CHROME_BROWSER_RENDERER_HOST_THREAD_HOP_RESOURCE_THROTTLE_H_ #include "base/macros.h" #include "base/memory/weak_ptr.h" #include "content/public/browser/resource_throttle.h" namespace base { class TimeTicks; } // A ResourceThrottle which defers request start, redirect, and response // completion on an IO to UI to IO round-trip. This throttle will be added on a // field trial to determine the cost of making some resource-related decisions // on the UI thread. See https://crbug.com/524228. class ThreadHopResourceThrottle : public content::ResourceThrottle { public: ThreadHopResourceThrottle(); ~ThreadHopResourceThrottle() override; static bool IsEnabled(); // content::ResourceThrottle: void WillStartRequest(bool* defer) override; void WillRedirectRequest(const net::RedirectInfo& redirect_info, bool* defer) override; void WillProcessResponse(bool* defer) override; const char* GetNameForLogging() const override; private: void ResumeAfterThreadHop(); void Resume(const base::TimeTicks& time); base::WeakPtrFactory weak_factory_; DISALLOW_COPY_AND_ASSIGN(ThreadHopResourceThrottle); }; #endif // CHROME_BROWSER_RENDERER_HOST_THREAD_HOP_RESOURCE_THROTTLE_H_