| OLD | NEW |
| 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/chrome_plugin_host.h" | 5 #include "chrome/browser/chrome_plugin_host.h" |
| 6 | 6 |
| 7 #include <set> | 7 #include <set> |
| 8 | 8 |
| 9 #include "base/basictypes.h" | 9 #include "base/basictypes.h" |
| 10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 49 | 49 |
| 50 using base::TimeDelta; | 50 using base::TimeDelta; |
| 51 | 51 |
| 52 // This class manages the interception of network requests. It queries the | 52 // This class manages the interception of network requests. It queries the |
| 53 // plugin on every request, and creates an intercept job if the plugin can | 53 // plugin on every request, and creates an intercept job if the plugin can |
| 54 // intercept the request. | 54 // intercept the request. |
| 55 // NOTE: All methods must be called on the IO thread. | 55 // NOTE: All methods must be called on the IO thread. |
| 56 class PluginRequestInterceptor | 56 class PluginRequestInterceptor |
| 57 : public PluginHelper, public net::URLRequest::Interceptor { | 57 : public PluginHelper, public net::URLRequest::Interceptor { |
| 58 public: | 58 public: |
| 59 static URLRequestJob* UninterceptedProtocolHandler( | 59 static net::URLRequestJob* UninterceptedProtocolHandler( |
| 60 net::URLRequest* request, const std::string& scheme) { | 60 net::URLRequest* request, const std::string& scheme) { |
| 61 // This will get called if a plugin failed to intercept a request for a | 61 // This will get called if a plugin failed to intercept a request for a |
| 62 // protocol it has registered. In that case, we return NULL and the request | 62 // protocol it has registered. In that case, we return NULL and the request |
| 63 // will result in an error. | 63 // will result in an error. |
| 64 return new URLRequestErrorJob(request, net::ERR_FILE_NOT_FOUND); | 64 return new URLRequestErrorJob(request, net::ERR_FILE_NOT_FOUND); |
| 65 } | 65 } |
| 66 | 66 |
| 67 explicit PluginRequestInterceptor(ChromePluginLib* plugin) | 67 explicit PluginRequestInterceptor(ChromePluginLib* plugin) |
| 68 : PluginHelper(plugin) { | 68 : PluginHelper(plugin) { |
| 69 net::URLRequest::RegisterRequestInterceptor(this); | 69 net::URLRequest::RegisterRequestInterceptor(this); |
| (...skipping 20 matching lines...) Expand all Loading... |
| 90 // Only add a protocol factory if the net::URLRequest doesn't already handle | 90 // Only add a protocol factory if the net::URLRequest doesn't already handle |
| 91 // it. If we fail to intercept, the request will be treated as an error. | 91 // it. If we fail to intercept, the request will be treated as an error. |
| 92 if (!net::URLRequest::IsHandledProtocol(lower_scheme)) { | 92 if (!net::URLRequest::IsHandledProtocol(lower_scheme)) { |
| 93 registered_protocols_.insert(lower_scheme); | 93 registered_protocols_.insert(lower_scheme); |
| 94 net::URLRequest::RegisterProtocolFactory(lower_scheme, | 94 net::URLRequest::RegisterProtocolFactory(lower_scheme, |
| 95 &UninterceptedProtocolHandler); | 95 &UninterceptedProtocolHandler); |
| 96 } | 96 } |
| 97 } | 97 } |
| 98 | 98 |
| 99 // net::URLRequest::Interceptor | 99 // net::URLRequest::Interceptor |
| 100 virtual URLRequestJob* MaybeIntercept(net::URLRequest* request) { | 100 virtual net::URLRequestJob* MaybeIntercept(net::URLRequest* request) { |
| 101 // TODO(darin): This DCHECK fails in the unit tests because our interceptor | 101 // TODO(darin): This DCHECK fails in the unit tests because our interceptor |
| 102 // is being persisted across unit tests. As a result, each time we get | 102 // is being persisted across unit tests. As a result, each time we get |
| 103 // poked on a different thread, but never from more than one thread at a | 103 // poked on a different thread, but never from more than one thread at a |
| 104 // time. We need a way to have the URLRequestJobManager get reset between | 104 // time. We need a way to have the URLRequestJobManager get reset between |
| 105 // unit tests. | 105 // unit tests. |
| 106 // DCHECK(CalledOnValidThread()); | 106 // DCHECK(CalledOnValidThread()); |
| 107 | 107 |
| 108 if (!IsHandledProtocol(request->url().scheme())) | 108 if (!IsHandledProtocol(request->url().scheme())) |
| 109 return NULL; | 109 return NULL; |
| 110 | 110 |
| (...skipping 714 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 825 CPBrowsingContext context) { | 825 CPBrowsingContext context) { |
| 826 // Sadly if we try and pass context through, we seem to break cl's little | 826 // Sadly if we try and pass context through, we seem to break cl's little |
| 827 // brain trying to compile the Tuple3 ctor. This cast works. | 827 // brain trying to compile the Tuple3 ctor. This cast works. |
| 828 int32 context_as_int32 = static_cast<int32>(context); | 828 int32 context_as_int32 = static_cast<int32>(context); |
| 829 // Plugins can only be accessed on the IO thread. | 829 // Plugins can only be accessed on the IO thread. |
| 830 BrowserThread::PostTask( | 830 BrowserThread::PostTask( |
| 831 BrowserThread::IO, FROM_HERE, | 831 BrowserThread::IO, FROM_HERE, |
| 832 NewRunnableFunction(PluginCommandHandler::HandleCommand, | 832 NewRunnableFunction(PluginCommandHandler::HandleCommand, |
| 833 command, data, context_as_int32)); | 833 command, data, context_as_int32)); |
| 834 } | 834 } |
| OLD | NEW |