| Index: chrome/browser/extensions/extensions_ui.cc | 
| =================================================================== | 
| --- chrome/browser/extensions/extensions_ui.cc	(revision 29288) | 
| +++ chrome/browser/extensions/extensions_ui.cc	(working copy) | 
| @@ -8,6 +8,7 @@ | 
| #include "app/resource_bundle.h" | 
| #include "base/string_util.h" | 
| #include "base/thread.h" | 
| +#include "chrome/browser/browser.h" | 
| #include "chrome/browser/browser_process.h" | 
| #include "chrome/browser/chrome_thread.h" | 
| #include "chrome/browser/debugger/devtools_manager.h" | 
| @@ -95,6 +96,8 @@ | 
| NewCallback(this, &ExtensionsDOMHandler::HandleEnableMessage)); | 
| dom_ui_->RegisterMessageCallback("uninstall", | 
| NewCallback(this, &ExtensionsDOMHandler::HandleUninstallMessage)); | 
| +  dom_ui_->RegisterMessageCallback("options", | 
| +    NewCallback(this, &ExtensionsDOMHandler::HandleOptionsMessage)); | 
| dom_ui_->RegisterMessageCallback("load", | 
| NewCallback(this, &ExtensionsDOMHandler::HandleLoadMessage)); | 
| dom_ui_->RegisterMessageCallback("pack", | 
| @@ -198,6 +201,22 @@ | 
| extensions_service_->UninstallExtension(extension_id, false); | 
| } | 
|  | 
| +void ExtensionsDOMHandler::HandleOptionsMessage(const Value* value) { | 
| +  CHECK(value->IsType(Value::TYPE_LIST)); | 
| +  const ListValue* list = static_cast<const ListValue*>(value); | 
| +  CHECK(list->GetSize() == 1); | 
| +  std::string extension_id; | 
| +  CHECK(list->GetString(0, &extension_id)); | 
| +  Extension *extension = extensions_service_->GetExtensionById(extension_id); | 
| +  if (!extension || extension->options_url().is_empty()) { | 
| +    return; | 
| +  } | 
| +  Browser* browser = Browser::GetOrCreateTabbedBrowser(dom_ui_->GetProfile()); | 
| +  CHECK(browser); | 
| +  browser->OpenURL(extension->options_url(), GURL(), NEW_FOREGROUND_TAB, | 
| +                   PageTransition::LINK); | 
| +} | 
| + | 
| void ExtensionsDOMHandler::HandleLoadMessage(const Value* value) { | 
| std::string string_path; | 
| CHECK(value->IsType(Value::TYPE_LIST)); | 
| @@ -399,6 +418,9 @@ | 
| extension_data->SetString(L"description", extension->description()); | 
| extension_data->SetString(L"version", extension->version()->GetString()); | 
| extension_data->SetBoolean(L"enabled", enabled); | 
| +  if (!extension->options_url().is_empty()) { | 
| +    extension_data->SetString(L"options_url", extension->options_url().spec()); | 
| +  } | 
|  | 
| // Add list of content_script detail DictionaryValues | 
| ListValue *content_script_list = new ListValue(); | 
|  |