| Index: extensions/renderer/bindings/api_binding.cc
 | 
| diff --git a/extensions/renderer/bindings/api_binding.cc b/extensions/renderer/bindings/api_binding.cc
 | 
| index d5ee62f9c6a8a96aad011e315b1d69bb75a2cc5e..e05b3c4160921a5eadaa77826c8696be8ffce6c6 100644
 | 
| --- a/extensions/renderer/bindings/api_binding.cc
 | 
| +++ b/extensions/renderer/bindings/api_binding.cc
 | 
| @@ -193,6 +193,7 @@ APIBinding::APIBinding(const std::string& api_name,
 | 
|                         const base::ListValue* event_definitions,
 | 
|                         const base::DictionaryValue* property_definitions,
 | 
|                         const CreateCustomType& create_custom_type,
 | 
| +                       const OnSilentRequest& on_silent_request,
 | 
|                         std::unique_ptr<APIBindingHooks> binding_hooks,
 | 
|                         APITypeReferenceMap* type_refs,
 | 
|                         APIRequestHandler* request_handler,
 | 
| @@ -201,6 +202,7 @@ APIBinding::APIBinding(const std::string& api_name,
 | 
|      : api_name_(api_name),
 | 
|        property_definitions_(property_definitions),
 | 
|        create_custom_type_(create_custom_type),
 | 
| +      on_silent_request_(on_silent_request),
 | 
|        binding_hooks_(std::move(binding_hooks)),
 | 
|        type_refs_(type_refs),
 | 
|        request_handler_(request_handler),
 | 
| @@ -584,6 +586,7 @@ void APIBinding::HandleCall(const std::string& name,
 | 
|    bool invalid_invocation = false;
 | 
|    v8::Local<v8::Function> custom_callback;
 | 
|    bool updated_args = false;
 | 
| +  int old_request_id = request_handler_->last_sent_request_id();
 | 
|    {
 | 
|      v8::TryCatch try_catch(isolate);
 | 
|      APIBindingHooks::RequestResult hooks_result = binding_hooks_->RunHooks(
 | 
| @@ -602,6 +605,14 @@ void APIBinding::HandleCall(const std::string& name,
 | 
|        case APIBindingHooks::RequestResult::HANDLED:
 | 
|          if (!hooks_result.return_value.IsEmpty())
 | 
|            arguments->Return(hooks_result.return_value);
 | 
| +
 | 
| +        // TODO(devlin): This is a pretty simplistic implementation of this,
 | 
| +        // but it's similar to the current JS logic. If we wanted to be more
 | 
| +        // correct, we could create a RequestScope object that watches outgoing
 | 
| +        // requests.
 | 
| +        if (old_request_id == request_handler_->last_sent_request_id())
 | 
| +          on_silent_request_.Run(context, name, argument_list);
 | 
| +
 | 
|          return;  // Our work here is done.
 | 
|        case APIBindingHooks::RequestResult::ARGUMENTS_UPDATED:
 | 
|          updated_args = true;  // Intentional fall-through.
 | 
| 
 |