Chromium Code Reviews| Index: chrome/common/renderer_configuration_struct_traits.cc |
| diff --git a/chrome/common/renderer_configuration_struct_traits.cc b/chrome/common/renderer_configuration_struct_traits.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..84aec065e349b8b2ec177855829d3968af8a86af |
| --- /dev/null |
| +++ b/chrome/common/renderer_configuration_struct_traits.cc |
| @@ -0,0 +1,169 @@ |
| +// Copyright 2016 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +#include "chrome/common/renderer_configuration_struct_traits.h" |
| + |
| +namespace mojo { |
| + |
| +// static |
| + |
| +chrome::mojom::ContentSetting |
| +EnumTraits<chrome::mojom::ContentSetting, ContentSetting>::ToMojom( |
| + ContentSetting setting) { |
| + switch (setting) { |
| + case CONTENT_SETTING_DEFAULT: |
| + return chrome::mojom::ContentSetting::CONTENT_SETTING_DEFAULT; |
| + case CONTENT_SETTING_ALLOW: |
| + return chrome::mojom::ContentSetting::CONTENT_SETTING_ALLOW; |
| + case CONTENT_SETTING_BLOCK: |
| + return chrome::mojom::ContentSetting::CONTENT_SETTING_BLOCK; |
| + case CONTENT_SETTING_ASK: |
| + return chrome::mojom::ContentSetting::CONTENT_SETTING_ASK; |
| + case CONTENT_SETTING_SESSION_ONLY: |
| + return chrome::mojom::ContentSetting::CONTENT_SETTING_SESSION_ONLY; |
| + case CONTENT_SETTING_DETECT_IMPORTANT_CONTENT: |
| + return chrome::mojom::ContentSetting:: |
| + CONTENT_SETTING_DETECT_IMPORTANT_CONTENT; |
| + // XXX: Should we really catch the "NUM_SETTINGS" dummy value that defines |
|
Sam McNally
2016/12/19 00:17:51
I think I would leave it out of the mojom enum ent
nigeltao1
2016/12/22 04:09:46
Done.
|
| + // a convenient constant for the number of enum values, not a semantically |
| + // valid enum value in its own right? Ditto below. |
| + case CONTENT_SETTING_NUM_SETTINGS: |
| + return chrome::mojom::ContentSetting::CONTENT_SETTING_NUM_SETTINGS; |
| + default: |
|
Sam McNally
2016/12/19 00:17:51
Put the catchall outside the switch instead of usi
nigeltao1
2016/12/22 04:09:46
Done.
|
| + // XXX: The NOTREACHED here mimics the one in |
| + // ui/base/mojo/window_open_disposition_enum_traits.h |
| + // |
| + // Can we really assert NOTREACHED if Mojo messages can come from |
| + // malicious renderers? Ditto below. |
|
Sam McNally
2016/12/19 00:17:51
Yes. This NOTREACHED would be hit in the sender of
nigeltao1
2016/12/22 04:09:46
Acknowledged.
|
| + NOTREACHED(); |
| + return chrome::mojom::ContentSetting::CONTENT_SETTING_DEFAULT; |
| + } |
| +} |
| + |
| +// static |
| +bool EnumTraits<chrome::mojom::ContentSetting, ContentSetting>::FromMojom( |
| + chrome::mojom::ContentSetting setting, |
| + ContentSetting* out) { |
| + switch (setting) { |
| + case chrome::mojom::ContentSetting::CONTENT_SETTING_DEFAULT: |
| + *out = CONTENT_SETTING_DEFAULT; |
| + return true; |
| + case chrome::mojom::ContentSetting::CONTENT_SETTING_ALLOW: |
| + *out = CONTENT_SETTING_ALLOW; |
| + return true; |
| + case chrome::mojom::ContentSetting::CONTENT_SETTING_BLOCK: |
| + *out = CONTENT_SETTING_BLOCK; |
| + return true; |
| + case chrome::mojom::ContentSetting::CONTENT_SETTING_ASK: |
| + *out = CONTENT_SETTING_ASK; |
| + return true; |
| + case chrome::mojom::ContentSetting::CONTENT_SETTING_SESSION_ONLY: |
| + *out = CONTENT_SETTING_SESSION_ONLY; |
| + return true; |
| + case chrome::mojom::ContentSetting:: |
| + CONTENT_SETTING_DETECT_IMPORTANT_CONTENT: |
| + *out = CONTENT_SETTING_DETECT_IMPORTANT_CONTENT; |
| + return true; |
| + case chrome::mojom::ContentSetting::CONTENT_SETTING_NUM_SETTINGS: |
| + *out = CONTENT_SETTING_NUM_SETTINGS; |
| + return true; |
| + default: |
| + NOTREACHED(); |
|
Sam McNally
2016/12/19 00:17:51
Again, move this out of the switch. I think it mak
nigeltao1
2016/12/22 04:09:45
Done.
|
| + return false; |
| + } |
| +} |
| + |
| +// Note that the {primary,secondary}_pattern methods aren't simple getters. |
| +// They serialize the ContentSettingsPattern to a string. |
| + |
| +// static |
| +const std::string |
|
Sam McNally
2016/12/19 00:17:51
This is inefficient. This accessor is called twice
nigeltao1
2016/12/22 04:09:45
No longer applicable, as I serialize the underlyin
|
| +StructTraits<chrome::mojom::ContentSettingPatternSourceDataView, |
| + ContentSettingPatternSource>:: |
| + primary_pattern(const ContentSettingPatternSource& r) { |
| + return r.primary_pattern.ToString(); |
| +} |
| + |
| +// static |
| +const std::string |
| +StructTraits<chrome::mojom::ContentSettingPatternSourceDataView, |
| + ContentSettingPatternSource>:: |
| + secondary_pattern(const ContentSettingPatternSource& r) { |
| + return r.secondary_pattern.ToString(); |
| +} |
| + |
| +// static |
| +ContentSetting StructTraits<chrome::mojom::ContentSettingPatternSourceDataView, |
| + ContentSettingPatternSource>:: |
| + setting(const ContentSettingPatternSource& r) { |
| + return r.setting; |
| +} |
| + |
| +// static |
| +const std::string& StructTraits< |
| + chrome::mojom::ContentSettingPatternSourceDataView, |
| + ContentSettingPatternSource>::source(const ContentSettingPatternSource& r) { |
| + return r.source; |
| +} |
| + |
| +// static |
| +bool StructTraits<chrome::mojom::ContentSettingPatternSourceDataView, |
| + ContentSettingPatternSource>:: |
| + incognito(const ContentSettingPatternSource& r) { |
| + return r.incognito; |
| +} |
| + |
| +// static |
| +bool StructTraits<chrome::mojom::ContentSettingPatternSourceDataView, |
| + ContentSettingPatternSource>:: |
| + Read(chrome::mojom::ContentSettingPatternSourceDataView data, |
| + ContentSettingPatternSource* out) { |
| + std::string primary_pattern; |
| + std::string secondary_pattern; |
| + if (!data.ReadPrimaryPattern(&primary_pattern) || |
| + !data.ReadSecondaryPattern(&secondary_pattern) || |
| + !data.ReadSetting(&out->setting) || !data.ReadSource(&out->source)) |
| + return false; |
| + out->primary_pattern = ContentSettingsPattern::FromString(primary_pattern); |
| + out->secondary_pattern = |
| + ContentSettingsPattern::FromString(secondary_pattern); |
| + out->incognito = data.incognito(); |
| + return true; |
| +} |
| + |
| +// static |
| +const std::vector<ContentSettingPatternSource>& StructTraits< |
| + chrome::mojom::RendererContentSettingRulesDataView, |
| + RendererContentSettingRules>::image_rules(const RendererContentSettingRules& |
| + r) { |
| + return r.image_rules; |
| +} |
| + |
| +// static |
| +const std::vector<ContentSettingPatternSource>& |
| +StructTraits<chrome::mojom::RendererContentSettingRulesDataView, |
| + RendererContentSettingRules>:: |
| + script_rules(const RendererContentSettingRules& r) { |
| + return r.script_rules; |
| +} |
| + |
| +// static |
| +const std::vector<ContentSettingPatternSource>& |
| +StructTraits<chrome::mojom::RendererContentSettingRulesDataView, |
| + RendererContentSettingRules>:: |
| + autoplay_rules(const RendererContentSettingRules& r) { |
| + return r.autoplay_rules; |
| +} |
| + |
| +// static |
| +bool StructTraits<chrome::mojom::RendererContentSettingRulesDataView, |
| + RendererContentSettingRules>:: |
| + Read(chrome::mojom::RendererContentSettingRulesDataView data, |
| + RendererContentSettingRules* out) { |
| + return data.ReadImageRules(&out->image_rules) && |
| + data.ReadScriptRules(&out->script_rules) && |
| + data.ReadAutoplayRules(&out->autoplay_rules); |
| +} |
| + |
| +} // namespace mojo |