Mac: Fix compile error (issue #630).

git-svn-id: https://chromiumembedded.googlecode.com/svn/trunk@1121 5089003a-bbd8-11dd-ad1f-f1f9622dbc98
This commit is contained in:
Marshall Greenblatt
2013-03-04 22:57:27 +00:00
parent 944658ccbb
commit a6fb4d52d1
2 changed files with 128 additions and 130 deletions

View File

@@ -1,83 +1,77 @@
// Copyright (c) 2013 The Chromium Embedded Framework Authors. All rights // Copyright (c) 2013 The Chromium Embedded Framework Authors. All rights
// reserved. Use of this source code is governed by a BSD-style license that can // reserved. Use of this source code is governed by a BSD-style license that can
// be found in the LICENSE file. // be found in the LICENSE file.
#include "libcef/scheme_registrar_impl.h" #include "libcef/scheme_registrar_impl.h"
#include <string> #include <string>
#include "base/logging.h" #include "base/logging.h"
#include "base/string_util.h" #include "base/string_util.h"
#include "googleurl/src/url_util.h" #include "googleurl/src/url_util.h"
#include "third_party/WebKit/Source/Platform/chromium/public/WebString.h" #include "third_party/WebKit/Source/Platform/chromium/public/WebString.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/WebSecurityPolicy.h" #include "third_party/WebKit/Source/WebKit/chromium/public/WebSecurityPolicy.h"
struct CefSchemeRegistrarImpl::SchemeInfo { CefSchemeRegistrarImpl::CefSchemeRegistrarImpl()
std::string scheme_name; : supported_thread_id_(base::PlatformThread::CurrentId()) {
bool is_local; }
bool is_display_isolated;
}; bool CefSchemeRegistrarImpl::AddCustomScheme(
const CefString& scheme_name,
CefSchemeRegistrarImpl::CefSchemeRegistrarImpl() bool is_standard,
: supported_thread_id_(base::PlatformThread::CurrentId()) { bool is_local,
} bool is_display_isolated) {
if (!VerifyContext())
bool CefSchemeRegistrarImpl::AddCustomScheme( return false;
const CefString& scheme_name,
bool is_standard, std::string scheme_lower = StringToLowerASCII(scheme_name.ToString());
bool is_local, if (is_standard) {
bool is_display_isolated) {
if (!VerifyContext())
return false;
std::string scheme_lower = StringToLowerASCII(scheme_name.ToString());
if (is_standard) {
url_parse::Component scheme_comp(0, scheme_lower.length()); url_parse::Component scheme_comp(0, scheme_lower.length());
if (!url_util::IsStandard(scheme_lower.c_str(), scheme_comp)) if (!url_util::IsStandard(scheme_lower.c_str(), scheme_comp))
url_util::AddStandardScheme(scheme_lower.c_str()); url_util::AddStandardScheme(scheme_lower.c_str());
} }
SchemeInfo info = {scheme_lower, is_local, is_display_isolated}; SchemeInfo info = {scheme_lower, is_local, is_display_isolated};
scheme_info_list_.push_back(info); scheme_info_list_.push_back(info);
return true; return true;
} }
void CefSchemeRegistrarImpl::RegisterWithWebKit() { void CefSchemeRegistrarImpl::RegisterWithWebKit() {
if (scheme_info_list_.empty()) if (scheme_info_list_.empty())
return; return;
// Register the custom schemes. // Register the custom schemes.
SchemeInfoList::const_iterator it = scheme_info_list_.begin(); SchemeInfoList::const_iterator it = scheme_info_list_.begin();
for (; it != scheme_info_list_.end(); ++it) { for (; it != scheme_info_list_.end(); ++it) {
const SchemeInfo& info = *it; const SchemeInfo& info = *it;
if (info.is_local) { if (info.is_local) {
WebKit::WebSecurityPolicy::registerURLSchemeAsLocal( WebKit::WebSecurityPolicy::registerURLSchemeAsLocal(
WebKit::WebString::fromUTF8(info.scheme_name)); WebKit::WebString::fromUTF8(info.scheme_name));
} }
if (info.is_display_isolated) { if (info.is_display_isolated) {
WebKit::WebSecurityPolicy::registerURLSchemeAsDisplayIsolated( WebKit::WebSecurityPolicy::registerURLSchemeAsDisplayIsolated(
WebKit::WebString::fromUTF8(info.scheme_name)); WebKit::WebString::fromUTF8(info.scheme_name));
} }
} }
} }
bool CefSchemeRegistrarImpl::VerifyRefCount() { bool CefSchemeRegistrarImpl::VerifyRefCount() {
return (GetRefCt() == 1); return (GetRefCt() == 1);
} }
void CefSchemeRegistrarImpl::Detach() { void CefSchemeRegistrarImpl::Detach() {
DCHECK_EQ(base::PlatformThread::CurrentId(), supported_thread_id_); DCHECK_EQ(base::PlatformThread::CurrentId(), supported_thread_id_);
url_util::LockStandardSchemes(); url_util::LockStandardSchemes();
supported_thread_id_ = base::kInvalidThreadId; supported_thread_id_ = base::kInvalidThreadId;
} }
bool CefSchemeRegistrarImpl::VerifyContext() { bool CefSchemeRegistrarImpl::VerifyContext() {
if (base::PlatformThread::CurrentId() != supported_thread_id_) { if (base::PlatformThread::CurrentId() != supported_thread_id_) {
// This object should only be accessed from the thread that created it. // This object should only be accessed from the thread that created it.
NOTREACHED(); NOTREACHED();
return false; return false;
} }
return true; return true;
} }

View File

@@ -1,49 +1,53 @@
// Copyright (c) 2013 The Chromium Embedded Framework Authors. All rights // Copyright (c) 2013 The Chromium Embedded Framework Authors. All rights
// reserved. Use of this source code is governed by a BSD-style license that can // reserved. Use of this source code is governed by a BSD-style license that can
// be found in the LICENSE file. // be found in the LICENSE file.
#ifndef CEF_LIBCEF_SCHEME_REGISTRAR_IMPL_H_ #ifndef CEF_LIBCEF_SCHEME_REGISTRAR_IMPL_H_
#define CEF_LIBCEF_SCHEME_REGISTRAR_IMPL_H_ #define CEF_LIBCEF_SCHEME_REGISTRAR_IMPL_H_
#pragma once #pragma once
#include <list> #include <list>
#include <string> #include <string>
#include "include/cef_scheme.h" #include "include/cef_scheme.h"
#include "base/threading/platform_thread.h" #include "base/threading/platform_thread.h"
class CefSchemeRegistrarImpl : public CefSchemeRegistrar { class CefSchemeRegistrarImpl : public CefSchemeRegistrar {
public: public:
CefSchemeRegistrarImpl(); CefSchemeRegistrarImpl();
// CefSchemeRegistrar methods. // CefSchemeRegistrar methods.
virtual bool AddCustomScheme(const CefString& scheme_name, virtual bool AddCustomScheme(const CefString& scheme_name,
bool is_standard, bool is_standard,
bool is_local, bool is_local,
bool is_display_isolated) OVERRIDE; bool is_display_isolated) OVERRIDE;
void RegisterWithWebKit(); void RegisterWithWebKit();
// Verify that only a single reference exists to all CefSchemeRegistrarImpl // Verify that only a single reference exists to all CefSchemeRegistrarImpl
// objects. // objects.
bool VerifyRefCount(); bool VerifyRefCount();
void Detach(); void Detach();
private: private:
// Verify that the object is being accessed from the correct thread. // Verify that the object is being accessed from the correct thread.
bool VerifyContext(); bool VerifyContext();
base::PlatformThreadId supported_thread_id_; base::PlatformThreadId supported_thread_id_;
// Custom schemes that need to be registered with WebKit. // Custom schemes that need to be registered with WebKit.
struct SchemeInfo; struct SchemeInfo {
typedef std::list<SchemeInfo> SchemeInfoList; std::string scheme_name;
SchemeInfoList scheme_info_list_; bool is_local;
bool is_display_isolated;
IMPLEMENT_REFCOUNTING(CefSchemeRegistrarImpl); };
DISALLOW_COPY_AND_ASSIGN(CefSchemeRegistrarImpl); typedef std::list<SchemeInfo> SchemeInfoList;
}; SchemeInfoList scheme_info_list_;
#endif // CEF_LIBCEF_SCHEME_REGISTRAR_IMPL_H_ IMPLEMENT_REFCOUNTING(CefSchemeRegistrarImpl);
DISALLOW_COPY_AND_ASSIGN(CefSchemeRegistrarImpl);
};
#endif // CEF_LIBCEF_SCHEME_REGISTRAR_IMPL_H_