[SalesForce] How to login in salesforce using chrome extension

I want to develop a chrome extension but i have a problem that how to login in salesforce when click on button . First i made manifest file and then open popup it's working correctly. In this popup two text field one for username and other for password so now i want to login in salesforce when click on button.

Best Answer

Use the chrome.identity API methods. For example:

chrome.identity.launchWebAuthFlow(options, function(redirectUri) {
            if (chrome.runtime.lastError) {
                return callback(new Error(chrome.runtime.lastError));
            }

            // Upon success the response is appended to redirectUri, e.g.
            // https://{app_id}.chromiumapp.org/provider_cb#access_token={value}&refresh_token={value}
            var matches = redirectUri.match(redirectRe);
            if (matches && matches.length > 1) {
                handleProviderCodeResponse(parseRedirectFragment(matches[1]));
            } else {
                callback(new Error('Invalid redirect URI'));
            }
        });

        function parseRedirectFragment(fragment) {
            var pairs = fragment.split(/&/);
            var values = {};

            pairs.forEach(function(pair) {
                var nameVal = pair.split(/=/);
                values[nameVal[0]] = nameVal[1];
            });

            return values;
        }

        function handleProviderCodeResponse(values) {
            if (values.hasOwnProperty("code")) {
                var url = host + '/services/oauth2/token' +
                    '?client_id=' + clientId +
                    '&client_secret=' + clientSecret +
                    '&grant_type=authorization_code' +
                    '&code=' + values.code +
                    '&redirect_uri=' + encodeURIComponent(redirectUri);

                var xhr = new XMLHttpRequest();
                xhr.open("POST", url, true);
                xhr.onload = function() {
                    if (this.status =300) {
                        callback(new Error('error in handleCodeResponse.'));
                    } else {
                        handleProviderTokensResponse(JSON.parse(this.response));
                    }
                };
                xhr.send();
            } else {
                callback(new Error('error in handleProviderCodeResponse.'));
            }
        }

        function handleProviderTokensResponse(values) {
            if (values != null) {
                callback(null, values);
            } else {
                callback(new Error('error in handleProviderTokensResponse.'));
            }
        }
    };

    module.refreshToken = function(connection, callback) {
        var url = connection.instance_url + '/services/oauth2/token?client_id=' + clientId +
            '&client_secret=' + clientSecret +
            '&grant_type=refresh_token' +
            '&refresh_token=' + connection.refresh_token;

        var xhr = new XMLHttpRequest();
        xhr.open("POST", url, true);
        xhr.onload = function() {
            if (this.status =300) {
                callback(new Error('error in handleCodeResponse.'));
            } else {
                handleProviderTokenResponse(JSON.parse(this.response));
            }
        };
        xhr.send();

        function handleProviderTokenResponse(values) {
            if (values.hasOwnProperty('access_token')) {
                callback(null, values);
            } else {
                callback(new Error('error in handleProviderTokenResponse.'));
            }
        }
    };

References