15f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 25f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// found in the LICENSE file. 45f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 55f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "chrome/browser/services/gcm/push_messaging_application_id.h" 65f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 75f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "base/logging.h" 85f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "base/strings/string_number_conversions.h" 95f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "base/strings/string_split.h" 105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)namespace { 125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)const char kSeparator = '#'; // Ok as only the origin of the url is used. 135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)namespace gcm { 165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)const char kPushMessagingApplicationIdPrefix[] = "push"; 185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// static 205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)PushMessagingApplicationId PushMessagingApplicationId::Parse( 215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const std::string& id) { 225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) std::vector<std::string> parts; 235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) base::SplitString(id, kSeparator, &parts); 245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (parts.size() != 3 || parts[0] != kPushMessagingApplicationIdPrefix) 265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return PushMessagingApplicationId(); 275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) GURL origin = GURL(parts[1]); 295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (!origin.is_valid() || origin.GetOrigin() != origin) 305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return PushMessagingApplicationId(); 315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) int64 service_worker_registration_id; 335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (!base::StringToInt64(parts[2], &service_worker_registration_id)) 345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return PushMessagingApplicationId(); 355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return PushMessagingApplicationId(origin, service_worker_registration_id); 375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)bool PushMessagingApplicationId::IsValid() { 405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return origin.is_valid() && origin.GetOrigin() == origin && 415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) service_worker_registration_id >= 0; 425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)std::string PushMessagingApplicationId::ToString() const { 455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return (std::string(kPushMessagingApplicationIdPrefix) + kSeparator + 465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) origin.spec() + kSeparator + 475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) base::Int64ToString(service_worker_registration_id)); 485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} // namespace gcm 51