| Index: chrome/browser/ui/webui/options/chromeos/internet_options_handler.cc | 
| diff --git a/chrome/browser/ui/webui/options/chromeos/internet_options_handler.cc b/chrome/browser/ui/webui/options/chromeos/internet_options_handler.cc | 
| index 403125c093aa9912e8bc80c0636f3607273ab7bc..7171b089e0b47b774e7cbe81af80633c1205e585 100644 | 
| --- a/chrome/browser/ui/webui/options/chromeos/internet_options_handler.cc | 
| +++ b/chrome/browser/ui/webui/options/chromeos/internet_options_handler.cc | 
| @@ -106,7 +106,8 @@ const char kSetNetworkGuidMessage[] = "setNetworkGuid"; | 
| const char kRemoveNetworkMessage[] = "removeNetwork"; | 
|  | 
| // TODO(stevenjb): Deprecate these and integrate with settings Web UI. | 
| -const char kAddConnectionMessage[] = "addConnection"; | 
| +const char kAddVPNConnectionMessage[] = "addVPNConnection"; | 
| +const char kAddNonVPNConnectionMessage[] = "addNonVPNConnection"; | 
| const char kConfigureNetworkMessage[] = "configureNetwork"; | 
| const char kActivateNetworkMessage[] = "activateNetwork"; | 
|  | 
| @@ -289,8 +290,11 @@ void InternetOptionsHandler::InitializePage() { | 
| } | 
|  | 
| void InternetOptionsHandler::RegisterMessages() { | 
| -  web_ui()->RegisterMessageCallback(kAddConnectionMessage, | 
| -      base::Bind(&InternetOptionsHandler::AddConnection, | 
| +  web_ui()->RegisterMessageCallback(kAddVPNConnectionMessage, | 
| +      base::Bind(&InternetOptionsHandler::AddVPNConnection, | 
| +                 base::Unretained(this))); | 
| +  web_ui()->RegisterMessageCallback(kAddNonVPNConnectionMessage, | 
| +      base::Bind(&InternetOptionsHandler::AddNonVPNConnection, | 
| base::Unretained(this))); | 
| web_ui()->RegisterMessageCallback(kRemoveNetworkMessage, | 
| base::Bind(&InternetOptionsHandler::RemoveNetwork, | 
| @@ -565,7 +569,27 @@ const PrefService* InternetOptionsHandler::GetPrefs() const { | 
| return Profile::FromWebUI(web_ui())->GetPrefs(); | 
| } | 
|  | 
| -void InternetOptionsHandler::AddConnection(const base::ListValue* args) { | 
| + | 
| +void InternetOptionsHandler::AddVPNConnection(const base::ListValue* args) { | 
| +  if (args->empty()) { | 
| +    // Show the "add network" dialog for the built-in OpenVPN/L2TP provider. | 
| +    NetworkConfigView::ShowForType(shill::kTypeVPN, GetNativeWindow()); | 
| +    return; | 
| +  } | 
| + | 
| +  std::string extension_id; | 
| +  if (args->GetSize() != 1 || !args->GetString(0, &extension_id)) { | 
| +    NOTREACHED(); | 
| +    return; | 
| +  } | 
| + | 
| +  // Request that the third-party VPN provider identified by |provider_id| | 
| +  // show its "add network" dialog. | 
| +  chromeos::VpnServiceFactory::GetForBrowserContext( | 
| +      GetProfileForPrimaryUser())->SendShowAddDialogToExtension(extension_id); | 
| +} | 
| + | 
| +void InternetOptionsHandler::AddNonVPNConnection(const base::ListValue* args) { | 
| std::string onc_type; | 
| if (args->GetSize() != 1 || !args->GetString(0, &onc_type)) { | 
| NOTREACHED(); | 
| @@ -573,8 +597,6 @@ void InternetOptionsHandler::AddConnection(const base::ListValue* args) { | 
| } | 
| if (onc_type == ::onc::network_type::kWiFi) { | 
| NetworkConfigView::ShowForType(shill::kTypeWifi, GetNativeWindow()); | 
| -  } else if (onc_type == ::onc::network_type::kVPN) { | 
| -    NetworkConfigView::ShowForType(shill::kTypeVPN, GetNativeWindow()); | 
| } else if (onc_type == ::onc::network_type::kCellular) { | 
| ChooseMobileNetworkDialog::ShowDialog(GetNativeWindow()); | 
| } else { | 
|  |