15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2010 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/renderer/renderer_webcookiejar_impl.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h"
8eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "content/common/cookie_data.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/common/view_messages.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/renderer/content_renderer_client.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/renderer/render_view_impl.h"
12868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "third_party/WebKit/public/platform/WebCookie.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
14f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebCookie;
15f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebString;
16f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebURL;
17f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebVector;
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content {
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RendererWebCookieJarImpl::setCookie(
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const WebURL& url, const WebURL& first_party_for_cookies,
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const WebString& value) {
245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  std::string value_utf8 = base::UTF16ToUTF8(value);
255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  sender_->Send(new ViewHostMsg_SetCookie(
265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      sender_->GetRoutingID(), url, first_party_for_cookies, value_utf8));
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)WebString RendererWebCookieJarImpl::cookies(
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const WebURL& url, const WebURL& first_party_for_cookies) {
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string value_utf8;
325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  sender_->Send(new ViewHostMsg_GetCookies(
335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      sender_->GetRoutingID(), url, first_party_for_cookies, &value_utf8));
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return WebString::fromUTF8(value_utf8);
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)WebString RendererWebCookieJarImpl::cookieRequestHeaderFieldValue(
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const WebURL& url, const WebURL& first_party_for_cookies) {
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return cookies(url, first_party_for_cookies);
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RendererWebCookieJarImpl::rawCookies(
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const WebURL& url, const WebURL& first_party_for_cookies,
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    WebVector<WebCookie>& raw_cookies) {
45eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  std::vector<CookieData> cookies;
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  sender_->Send(new ViewHostMsg_GetRawCookies(
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      url, first_party_for_cookies, &cookies));
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  WebVector<WebCookie> result(cookies.size());
50eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  for (size_t i = 0; i < cookies.size(); ++i) {
51eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    const CookieData& c = cookies[i];
52eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    result[i] = WebCookie(WebString::fromUTF8(c.name),
53eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                          WebString::fromUTF8(c.value),
54eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                          WebString::fromUTF8(c.domain),
55eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                          WebString::fromUTF8(c.path),
56eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                          c.expires,
57eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                          c.http_only,
58eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                          c.secure,
59eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                          c.session);
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  raw_cookies.swap(result);
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RendererWebCookieJarImpl::deleteCookie(
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const WebURL& url, const WebString& cookie_name) {
665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  std::string cookie_name_utf8 = base::UTF16ToUTF8(cookie_name);
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  sender_->Send(new ViewHostMsg_DeleteCookie(url, cookie_name_utf8));
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool RendererWebCookieJarImpl::cookiesEnabled(
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const WebURL& url, const WebURL& first_party_for_cookies) {
72116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  bool cookies_enabled = false;
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  sender_->Send(new ViewHostMsg_CookiesEnabled(
74cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      sender_->GetRoutingID(), url, first_party_for_cookies, &cookies_enabled));
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return cookies_enabled;
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace content
79