1/* 2 * Copyright (C) 2013 Samsung Electronics Inc. All rights reserved. 3 * 4 * This library is free software; you can redistribute it and/or 5 * modify it under the terms of the GNU Library General Public 6 * License as published by the Free Software Foundation; either 7 * version 2 of the License, or (at your option) any later version. 8 * 9 * This library is distributed in the hope that it will be useful, 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 * Library General Public License for more details. 13 * 14 * You should have received a copy of the GNU Library General Public License 15 * along with this library; see the file COPYING.LIB. If not, write to 16 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 17 * Boston, MA 02110-1301, USA. 18 */ 19 20#include "config.h" 21#include "WebKitCredential.h" 22 23#include "WebCredential.h" 24#include "WebKitCredentialPrivate.h" 25#include <wtf/text/CString.h> 26 27using namespace WebKit; 28 29struct _WebKitCredential { 30 _WebKitCredential(const WebCore::Credential& coreCredential) 31 : credential(coreCredential) 32 { 33 } 34 35 WebCore::Credential credential; 36 CString username; 37 CString password; 38}; 39 40G_DEFINE_BOXED_TYPE(WebKitCredential, webkit_credential, webkit_credential_copy, webkit_credential_free) 41 42static inline WebKitCredentialPersistence toWebKitCredentialPersistence(WebCore::CredentialPersistence corePersistence) 43{ 44 switch (corePersistence) { 45 case WebCore::CredentialPersistenceNone: 46 return WEBKIT_CREDENTIAL_PERSISTENCE_NONE; 47 case WebCore::CredentialPersistenceForSession: 48 return WEBKIT_CREDENTIAL_PERSISTENCE_FOR_SESSION; 49 case WebCore::CredentialPersistencePermanent: 50 return WEBKIT_CREDENTIAL_PERSISTENCE_PERMANENT; 51 default: 52 ASSERT_NOT_REACHED(); 53 return WEBKIT_CREDENTIAL_PERSISTENCE_NONE; 54 } 55} 56 57static inline WebCore::CredentialPersistence toWebCoreCredentialPersistence(WebKitCredentialPersistence kitPersistence) 58{ 59 switch (kitPersistence) { 60 case WEBKIT_CREDENTIAL_PERSISTENCE_NONE: 61 return WebCore::CredentialPersistenceNone; 62 case WEBKIT_CREDENTIAL_PERSISTENCE_FOR_SESSION: 63 return WebCore::CredentialPersistenceForSession; 64 case WEBKIT_CREDENTIAL_PERSISTENCE_PERMANENT: 65 return WebCore::CredentialPersistencePermanent; 66 default: 67 ASSERT_NOT_REACHED(); 68 return WebCore::CredentialPersistenceNone; 69 } 70} 71 72WebKitCredential* webkitCredentialCreate(const WebCore::Credential& coreCredential) 73{ 74 WebKitCredential* credential = g_slice_new(WebKitCredential); 75 new (credential) WebKitCredential(coreCredential); 76 return credential; 77} 78 79const WebCore::Credential& webkitCredentialGetCredential(WebKitCredential* credential) 80{ 81 ASSERT(credential); 82 return credential->credential; 83} 84 85/** 86 * webkit_credential_new: 87 * @username: The username for the new credential 88 * @password: The password for the new credential 89 * @persistence: The #WebKitCredentialPersistence of the new credential 90 * 91 * Create a new credential from the provided username, password and persistence mode. 92 * 93 * Returns: (transfer full): A #WebKitCredential. 94 * 95 * Since: 2.2 96 */ 97WebKitCredential* webkit_credential_new(const gchar* username, const gchar* password, WebKitCredentialPersistence persistence) 98{ 99 g_return_val_if_fail(username, 0); 100 g_return_val_if_fail(password, 0); 101 102 return webkitCredentialCreate(WebCore::Credential(String::fromUTF8(username), String::fromUTF8(password), toWebCoreCredentialPersistence(persistence))); 103} 104 105/** 106 * webkit_credential_copy: 107 * @credential: a #WebKitCredential 108 * 109 * Make a copy of the #WebKitCredential. 110 * 111 * Returns: (transfer full): A copy of passed in #WebKitCredential 112 * 113 * Since: 2.2 114 */ 115WebKitCredential* webkit_credential_copy(WebKitCredential* credential) 116{ 117 g_return_val_if_fail(credential, 0); 118 119 return webkitCredentialCreate(credential->credential); 120} 121 122/** 123 * webkit_credential_free: 124 * @credential: A #WebKitCredential 125 * 126 * Free the #WebKitCredential. 127 * 128 * Since: 2.2 129 */ 130void webkit_credential_free(WebKitCredential* credential) 131{ 132 g_return_if_fail(credential); 133 134 credential->~WebKitCredential(); 135 g_slice_free(WebKitCredential, credential); 136} 137 138/** 139 * webkit_credential_get_username: 140 * @credential: a #WebKitCredential 141 * 142 * Get the username currently held by this #WebKitCredential. 143 * 144 * Returns: The username stored in the #WebKitCredential. 145 * 146 * Since: 2.2 147 */ 148const gchar* webkit_credential_get_username(WebKitCredential* credential) 149{ 150 g_return_val_if_fail(credential, 0); 151 152 if (credential->username.isNull()) 153 credential->username = credential->credential.user().utf8(); 154 return credential->username.data(); 155} 156 157/** 158 * webkit_credential_get_password: 159 * @credential: a #WebKitCredential 160 * 161 * Get the password currently held by this #WebKitCredential. 162 * 163 * Returns: The password stored in the #WebKitCredential. 164 * 165 * Since: 2.2 166 */ 167const gchar* webkit_credential_get_password(WebKitCredential* credential) 168{ 169 g_return_val_if_fail(credential, 0); 170 171 if (credential->password.isNull()) 172 credential->password = credential->credential.password().utf8(); 173 return credential->password.data(); 174} 175 176/** 177 * webkit_credential_has_password: 178 * @credential: a #WebKitCredential 179 * 180 * Determine whether this credential has a password stored. 181 * 182 * Returns: %TRUE if the credential has a password or %FALSE otherwise. 183 * 184 * Since: 2.2 185 */ 186gboolean webkit_credential_has_password(WebKitCredential* credential) 187{ 188 g_return_val_if_fail(credential, FALSE); 189 190 return credential->credential.hasPassword(); 191} 192 193/** 194 * webkit_credential_get_persistence: 195 * @credential: a #WebKitCredential 196 * 197 * Get the persistence mode currently held by this #WebKitCredential. 198 * 199 * Returns: The #WebKitCredentialPersistence stored in the #WebKitCredential. 200 * 201 * Since: 2.2 202 */ 203WebKitCredentialPersistence webkit_credential_get_persistence(WebKitCredential* credential) 204{ 205 g_return_val_if_fail(credential, WEBKIT_CREDENTIAL_PERSISTENCE_NONE); 206 207 return toWebKitCredentialPersistence(credential->credential.persistence()); 208} 209