| OLD | NEW | 
|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/extensions/extension_function_dispatcher.h" | 5 #include "chrome/browser/extensions/extension_function_dispatcher.h" | 
| 6 | 6 | 
| 7 #include "base/bind.h" | 7 #include "base/bind.h" | 
| 8 #include "base/json/json_string_value_serializer.h" | 8 #include "base/json/json_string_value_serializer.h" | 
| 9 #include "base/lazy_instance.h" | 9 #include "base/lazy_instance.h" | 
| 10 #include "base/logging.h" | 10 #include "base/logging.h" | 
| (...skipping 240 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 251       base::Bind(&IOThreadResponseCallback, ipc_sender, routing_id, | 251       base::Bind(&IOThreadResponseCallback, ipc_sender, routing_id, | 
| 252                  params.request_id)); | 252                  params.request_id)); | 
| 253 | 253 | 
| 254   scoped_refptr<ExtensionFunction> function( | 254   scoped_refptr<ExtensionFunction> function( | 
| 255       CreateExtensionFunction(params, extension, render_process_id, | 255       CreateExtensionFunction(params, extension, render_process_id, | 
| 256                               extension_info_map->process_map(), | 256                               extension_info_map->process_map(), | 
| 257                               g_global_io_data.Get().api.get(), | 257                               g_global_io_data.Get().api.get(), | 
| 258                               profile, callback)); | 258                               profile, callback)); | 
| 259   scoped_ptr<ListValue> args(params.arguments.DeepCopy()); | 259   scoped_ptr<ListValue> args(params.arguments.DeepCopy()); | 
| 260 | 260 | 
| 261   if (!function) { | 261   if (!function.get()) { | 
| 262     LogFailure(extension, | 262     LogFailure(extension, | 
| 263                params.name, | 263                params.name, | 
| 264                args.Pass(), | 264                args.Pass(), | 
| 265                extensions::BlockedAction::ACCESS_DENIED, | 265                extensions::BlockedAction::ACCESS_DENIED, | 
| 266                profile_cast); | 266                profile_cast); | 
| 267     return; | 267     return; | 
| 268   } | 268   } | 
| 269 | 269 | 
| 270   IOThreadExtensionFunction* function_io = | 270   IOThreadExtensionFunction* function_io = | 
| 271       function->AsIOThreadExtensionFunction(); | 271       function->AsIOThreadExtensionFunction(); | 
| 272   if (!function_io) { | 272   if (!function_io) { | 
| 273     NOTREACHED(); | 273     NOTREACHED(); | 
| 274     return; | 274     return; | 
| 275   } | 275   } | 
| 276   function_io->set_ipc_sender(ipc_sender); | 276   function_io->set_ipc_sender(ipc_sender); | 
| 277   function_io->set_extension_info_map(extension_info_map); | 277   function_io->set_extension_info_map(extension_info_map); | 
| 278   function->set_include_incognito( | 278   function->set_include_incognito( | 
| 279       extension_info_map->IsIncognitoEnabled(extension->id())); | 279       extension_info_map->IsIncognitoEnabled(extension->id())); | 
| 280 | 280 | 
| 281   if (!CheckPermissions(function, extension, params, callback)) { | 281   if (!CheckPermissions(function.get(), extension, params, callback)) { | 
| 282     LogFailure(extension, | 282     LogFailure(extension, | 
| 283                params.name, | 283                params.name, | 
| 284                args.Pass(), | 284                args.Pass(), | 
| 285                extensions::BlockedAction::ACCESS_DENIED, | 285                extensions::BlockedAction::ACCESS_DENIED, | 
| 286                profile_cast); | 286                profile_cast); | 
| 287     return; | 287     return; | 
| 288   } | 288   } | 
| 289 | 289 | 
| 290   ExtensionsQuotaService* quota = extension_info_map->GetQuotaService(); | 290   ExtensionsQuotaService* quota = extension_info_map->GetQuotaService(); | 
| 291   std::string violation_error = quota->Assess(extension->id(), | 291   std::string violation_error = quota->Assess(extension->id(), | 
| 292                                               function, | 292                                               function.get(), | 
| 293                                               ¶ms.arguments, | 293                                               ¶ms.arguments, | 
| 294                                               base::TimeTicks::Now()); | 294                                               base::TimeTicks::Now()); | 
| 295   if (violation_error.empty()) { | 295   if (violation_error.empty()) { | 
| 296     LogSuccess(extension, | 296     LogSuccess(extension, | 
| 297                params.name, | 297                params.name, | 
| 298                args.Pass(), | 298                args.Pass(), | 
| 299                profile_cast); | 299                profile_cast); | 
| 300     function->Run(); | 300     function->Run(); | 
| 301   } else { | 301   } else { | 
| 302     LogFailure(extension, | 302     LogFailure(extension, | 
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 356         params.source_url)); | 356         params.source_url)); | 
| 357 | 357 | 
| 358   scoped_refptr<ExtensionFunction> function( | 358   scoped_refptr<ExtensionFunction> function( | 
| 359       CreateExtensionFunction(params, extension, | 359       CreateExtensionFunction(params, extension, | 
| 360                               render_view_host->GetProcess()->GetID(), | 360                               render_view_host->GetProcess()->GetID(), | 
| 361                               *(service->process_map()), | 361                               *(service->process_map()), | 
| 362                               extensions::ExtensionAPI::GetSharedInstance(), | 362                               extensions::ExtensionAPI::GetSharedInstance(), | 
| 363                               profile(), callback)); | 363                               profile(), callback)); | 
| 364   scoped_ptr<ListValue> args(params.arguments.DeepCopy()); | 364   scoped_ptr<ListValue> args(params.arguments.DeepCopy()); | 
| 365 | 365 | 
| 366   if (!function) { | 366   if (!function.get()) { | 
| 367     LogFailure(extension, | 367     LogFailure(extension, | 
| 368                params.name, | 368                params.name, | 
| 369                args.Pass(), | 369                args.Pass(), | 
| 370                extensions::BlockedAction::ACCESS_DENIED, | 370                extensions::BlockedAction::ACCESS_DENIED, | 
| 371                profile()); | 371                profile()); | 
| 372     return; | 372     return; | 
| 373   } | 373   } | 
| 374 | 374 | 
| 375   UIThreadExtensionFunction* function_ui = | 375   UIThreadExtensionFunction* function_ui = | 
| 376       function->AsUIThreadExtensionFunction(); | 376       function->AsUIThreadExtensionFunction(); | 
| 377   if (!function_ui) { | 377   if (!function_ui) { | 
| 378     NOTREACHED(); | 378     NOTREACHED(); | 
| 379     return; | 379     return; | 
| 380   } | 380   } | 
| 381   function_ui->SetRenderViewHost(render_view_host); | 381   function_ui->SetRenderViewHost(render_view_host); | 
| 382   function_ui->set_dispatcher(AsWeakPtr()); | 382   function_ui->set_dispatcher(AsWeakPtr()); | 
| 383   function_ui->set_profile(profile_); | 383   function_ui->set_profile(profile_); | 
| 384   function->set_include_incognito(service->CanCrossIncognito(extension)); | 384   function->set_include_incognito(service->CanCrossIncognito(extension)); | 
| 385 | 385 | 
| 386   if (!CheckPermissions(function, extension, params, callback)) { | 386   if (!CheckPermissions(function.get(), extension, params, callback)) { | 
| 387     LogFailure(extension, | 387     LogFailure(extension, | 
| 388                params.name, | 388                params.name, | 
| 389                args.Pass(), | 389                args.Pass(), | 
| 390                extensions::BlockedAction::ACCESS_DENIED, | 390                extensions::BlockedAction::ACCESS_DENIED, | 
| 391                profile()); | 391                profile()); | 
| 392     return; | 392     return; | 
| 393   } | 393   } | 
| 394 | 394 | 
| 395   ExtensionsQuotaService* quota = service->quota_service(); | 395   ExtensionsQuotaService* quota = service->quota_service(); | 
| 396   std::string violation_error = quota->Assess(extension->id(), | 396   std::string violation_error = quota->Assess(extension->id(), | 
| 397                                               function, | 397                                               function.get(), | 
| 398                                               ¶ms.arguments, | 398                                               ¶ms.arguments, | 
| 399                                               base::TimeTicks::Now()); | 399                                               base::TimeTicks::Now()); | 
| 400   if (violation_error.empty()) { | 400   if (violation_error.empty()) { | 
| 401     // See crbug.com/39178. | 401     // See crbug.com/39178. | 
| 402     ExternalProtocolHandler::PermitLaunchUrl(); | 402     ExternalProtocolHandler::PermitLaunchUrl(); | 
| 403     LogSuccess(extension, params.name, args.Pass(), profile()); | 403     LogSuccess(extension, params.name, args.Pass(), profile()); | 
| 404     function->Run(); | 404     function->Run(); | 
| 405   } else { | 405   } else { | 
| 406     LogFailure(extension, | 406     LogFailure(extension, | 
| 407                params.name, | 407                params.name, | 
| (...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 526   return function; | 526   return function; | 
| 527 } | 527 } | 
| 528 | 528 | 
| 529 // static | 529 // static | 
| 530 void ExtensionFunctionDispatcher::SendAccessDenied( | 530 void ExtensionFunctionDispatcher::SendAccessDenied( | 
| 531     const ExtensionFunction::ResponseCallback& callback) { | 531     const ExtensionFunction::ResponseCallback& callback) { | 
| 532   ListValue empty_list; | 532   ListValue empty_list; | 
| 533   callback.Run(ExtensionFunction::FAILED, empty_list, | 533   callback.Run(ExtensionFunction::FAILED, empty_list, | 
| 534                "Access to extension API denied."); | 534                "Access to extension API denied."); | 
| 535 } | 535 } | 
| OLD | NEW | 
|---|