Liberal government revising plan to regulate social media in light of U.S. Capitol riot - The Globe and Mail

Ottawa

Published January 18, 2021 Updated January 18, 2021

Getting audio file ...

Audio for this article is not available at this time.

This translation has been automatically generated and has not been verified for accuracy. Full Disclaimer

The federal government is making final revisions to its plans to act against online hate and harassment on social-media platforms in light of the deadly U.S. Capitol Hill riots, and its proposed measures will be presented to cabinet in the coming weeks.

The recent actions of web giants Facebook, Google, Twitter, Apple and Amazon following the riots are prompting worldwide debate about fundamental issues of freedom of speech, the responsibility of platform companies to moderate their sites, and the proper role of government regulation.

If approved by cabinet, the Canadian legislation could be introduced in Parliament as soon as February or March. The legislation is expected to be influenced by measures already in place in other countries, such as Germany, which requires social-media platforms to remove illegal content under tight deadlines and the threat of financial penalties. In a Canadian context, this will likely involve the creation of a new government regulator.

Story continues below advertisement

The efforts to update the plan ahead of a cabinet decision were confirmed to The Globe and Mail by a senior government official. The Globe is not identifying the official because they were not authorized to comment publicly on the matter.

Social-media companies have suspended a range of accounts following the Jan. 6 raids in Washington by supporters of outgoing U.S. President Donald Trump, who was impeached a week later for incitement of insurrection. Twitter and Facebook banned Mr. Trump from their platforms indefinitely for his inciting tweets and posts around the time of the riots and out of concern that his posts could spark further violence in the run-up to Wednesday’s inauguration of his successor. Other social-media platforms followed with similar restrictions. Google’s YouTube temporarily suspended Mr. Trump’s channel.

Officials with Google, Facebook and Twitter all told The Globe that they welcome clear regulatory rules from Ottawa when it comes to illegal content.

Attention on the power of social-media companies is heightening as the federal government is in the final stages of preparing measures flowing from a 2019 campaign pledge to regulate social media’s illegal content. The focus of the original promise was on hate speech, but the government has said it will also include issues such as the sharing of intimate images without consent.

The official said those proposals are now being reviewed in light of the recent events in the United States to see whether any further changes are needed before they are presented to cabinet.

Heritage Minister Steven Guilbeault and Justice Minister David Lametti are leading the file, with involvement from others in cabinet such as Public Safety Minister Bill Blair. Prime Minister Justin Trudeau reiterated the government’s plans in updated mandate letters to his cabinet, which were made public Friday. Mr. Trudeau’s letter to Mr. Guilbeault said he should work with other ministers “to take action on combatting hate groups and online hate and harassment, ideologically motivated violent extremism and terrorist organizations.”

Liberal MP Arif Virani, who is parliamentary secretary to the Justice Minister and who held consultations on the proposals, said the push to regulate social media is taking on a larger importance.

Story continues below advertisement

“There is a sense of greater urgency,” he said in an interview. “Obviously what happened in the United States … really has put this back at the forefront of people’s minds. But it’s not as if this is just a uniquely American phenomenon.”

While the federal government has provided few public details as to how it will regulate illegal content on social media, there are signs its approach will be influenced by recent moves by a handful of other countries, including Australia, France and Germany.

Germany’s 2017 Network Enforcement Act set timelines as short as 24 hours for the removal of content by platforms under threat of financial penalty. The German law generated significant controversy, as critics condemned the bill as a step too far in terms of limits on free speech.

Mr. Virani said the government has the benefit of studying how social-media companies have responded to such measures in other countries.

Mr. Guilbeault said in a statement to The Globe that while social-media companies have recently been active at removing illegal content, the government‘s planned approach will be “more effective and efficient than self-regulation.”

“While preserving a fundamental right to freedom of expression, our approach will require online platforms to monitor and eliminate illegal content that appears on their platforms. That includes hate speech, terrorist propaganda, violent content, child sexual exploitation and the non-consensual sharing of intimate images,” he said.

Story continues below advertisement

Google, Facebook and Twitter said they have not received any advance indication of the specific measures Ottawa is planning to introduce. The companies also noted that they have computer-assisted methods to identify and remove content that is illegal or not compliant with their own policies as well as staff who respond to content complaints.

“While we haven’t seen any written proposals or public consultation from the federal government yet, we have expressed our willingness to work closely with different levels of government across Canada,” Michele Austin, Twitter Canada’s head of public policy, government and philanthropy, said in a statement.

Jason Kee, Google Canada head of YouTube policy, made a similar pledge of co-operation while noting concern with the German approach.

“We remain uneasy about how the [German] law prioritizes speed where decisions require careful consideration, which in turn will likely lead to overremoval of legitimate expression,” he said.

Canadian federal politicians, including Infrastructure Minister Catherine McKenna and Conservative MP Michelle Rempel-Garner have repeatedly spoken out against the sexist and often anonymous comments that are directed their way on the platform.

Ms. Rempel-Garner recently published an essay condemning Twitter and calling for users to abandon the platform. She said it “rewards rage” and hurts political discourse by encouraging polarization and eliminating nuance.

Story continues below advertisement

Conservative Heritage critic Alain Rayes said in an interview that he shares the concern about polarization on social media, but he also wants to make sure the government protects free speech.

“There’s a delicate balance between protecting freedom and controlling extremist speech on these platforms. We know it’s not a simple issue,” he said. “We also need defenders of free speech, to ensure we don’t fall into the other extreme of ‘cancel culture.’ ”

NDP MP Charlie Angus has long called for stronger regulations on social-media platforms, but expressed skepticism about the Liberal government’s approach.

“They continue to talk tough and do nothing on how the platforms are not living up to their social obligations,” he said, echoing Ms. Rempel-Garner’s concern that the platforms’ algorithms reward users who post “poisonous” content.

University of Ottawa law professor Vivek Krishnamurthy, who is director of the Samuelson-Glushko Canadian Internet Policy and Public Interest Clinic, said a German-style approach could raise concerns if adopted by Canada.

He authored a paper last year that warned Canada’s stated plans to regulate social-media content may be in conflict with Canada’s recent commitments under the United States-Mexico-Canada Agreement on free trade.

Story continues below advertisement

In an interview, he noted that while any new law related to social media will need to comply with the Charter of Rights and Freedoms, he expressed concern about the signal Canada could be sending if it adopts a heavy-handed approach.

“I do think this model is a dangerous kind of model for a rights-respecting democracy like Canada to enact,” he said. “Because if we tell global internet platforms: ‘Follow our law. Get these notices from us [and] within 24 hours, take it down or else face massive fines,’ that is a model that is going to be very attractive to countries that are a lot less respectful of human rights. And they’re going to say, ‘Well, if Germany and Canada can do it, why can’t I?’ ”

Know what is happening in the halls of power with the day’s top political headlines and commentary as selected by Globe editors (subscribers only). Sign up today.

Follow Bill Curry on Twitter @curryb

", "

Save time by making it easy to scan all the latest stories on topics you follow in one place.

", "

", "

" ].join(""); var content2 = [ "

", "

", "

Adding topics. Click on the + symbol to save the topic to your Following page.

", "

", "

(Step 1 of 3)

", "

" ].join(""); var content3 = [ "

", "

", "

Clicking on the topic's name will bring you to a page where you can view all the articles that pertain to that topic.

", "

", "

(Step 2 of 3)

", "

" ].join(""); var content4 = [ "

", "

", "

", "

Access your following topics by clicking on your display name. The number in your display name indicates the number of new articles you haven’t read from your following topics.

", "

", "

(Step 3 of 3)

", "

" ].join(""); var contentMarkup = [content1, content2, content3, content4]; function createTourtip() { var relatedTopics = document.querySelector("#main-content-area .pb-f-topics-article-related .c-topic-group__body ul"); var topicPageTitle = document.querySelector(".o-primary-header--section .c-topic"); // If the following topics buttons are present on the page, set up the tourtips if (relatedTopics || topicPageTitle) { var modifier = relatedTopics ? 'darwin-arc6134--article' : 'darwin-arc6134--topic-page' var dataAnalyticsClick = JSON.stringify({ testId: "arc6134", type: "button", feature: "topic tour tip", label: "show tooltip" }); var el = relatedTopics ? document.createElement("li") : document.createElement("div"); el.classList.add("darwin-arc6134"); el.classList.add(modifier); el.innerHTML = "

"+contentMarkup[0] + "

"; relatedTopics ? relatedTopics.appendChild(el) : topicPageTitle.appendChild(el); // Remove follow topics onboarding messages and activation tooltips setTimeout(function() { var onboardingMessages = document.querySelectorAll(".c-topic-group__body .c-onboarding-message"); var tooltips = document.querySelectorAll(".c-topic-group__body .c-tooltip"); console.log("[ARC-6134]: onboardingMessages: ", onboardingMessages); Array.from(onboardingMessages).forEach(function(el) { el.parentNode.removeChild(el); }); Array.from(tooltips).forEach(function(el) { el.parentNode.removeChild(el); }); }, 3000); } } function analyticsPush(type, panel, action) { if (type === "simple") { analyticsLayer.push({ "event": "simpleEvent", "simpleEvent": { "testId": "arc6134", "action": "view tour slide", "label": "slide "+panel } }); } if (type === "click") { analyticsLayer.push({ "event":"clickEvent", "clickEvent": { "testId": "arc6134", "feature": "topic tour tip", "type": "button", "label": action, } }); } } function tourtipActions() { // Open tourtips var container = document.querySelector(".darwin-arc6134"); var activateIcon = document.querySelector(".js-tourtip-activate"); var tourtipContainer = document.querySelector(".darwin-arc6134__tourtip"); activateIcon.addEventListener("click", function() { if (!container.classList.contains("darwin-arc6134--open")) { container.classList.add("darwin-arc6134--open"); tourtipContainer.removeAttribute("hidden"); keepInViewport(); localStorage.setItem("tgam.tourtip_icon_clicked", true); analyticsPush("click", 1, "show tooltip"); analyticsPush("simple", 1, ""); } }); // Advance tourtip panels tourtipContainer.addEventListener('click', function(e) { var tourtipPanel = tourtipContainer.getAttribute("data-panel"); var activateIcon = document.querySelector(".js-tourtip-activate"); var el = e.target || e.srcElement; var action = el.getAttribute("data-action"); if (action === "next") { tourtipPanel++; analyticsPush("simple", tourtipPanel, action); } else if (action === "prev") { tourtipPanel--; analyticsPush("simple", tourtipPanel, action); } else { tourtipPanel = 1; tourtipContainer.setAttribute("hidden", true); container.classList.remove("darwin-arc6134--open"); tourtipContainer.classList.remove("darwin-arc6134__tourtip--leftOut"); tourtipContainer.classList.remove("darwin-arc6134__tourtip--rightOut"); activateIcon.classList.remove("darwin-arc6134__tourtip--leftOut"); activateIcon.classList.remove("darwin-arc6134__tourtip--rightOut"); tourtipContainer.classList.remove("js-tourtip--centred"); tourtipContainer.style.removeProperty("left"); } analyticsPush("click", tourtipPanel, action); tourtipPanel === 4 ? tourtipContainer.classList.add("darwin-arc6134__tourtip--last-panel") : tourtipContainer.classList.remove("darwin-arc6134__tourtip--last-panel"); tourtipContainer.innerHTML = contentMarkup[tourtipPanel-1]; tourtipContainer.dataset.panel = tourtipPanel; }); } function init() { console.log("[ARC-6134] init"); var testIsEnabled = /token=arc6134/.test(window.location.search); console.log("ARC-6134 testIsEnabled: ", testIsEnabled); var testGroup = userTestGroup(); if (testGroup === "variant" || testIsEnabled) { setUnitState("arc6134", "variant"); console.log("[ARC-6134] test group: variant"); createTourtip(); tourtipActions(); intersectTourtip(); } if (testGroup === "control") { console.log("[ARC-6134] test group: control"); setUnitState("arc6134", "control"); } } init(); }]); } window.tgam.darwin.tests.after.push(dwExecute_UXTestARC6134); })();

" ].join(""); } return template; } /** * Generate a template for the label * @param {String} label - the label text * @returns {String} */ function displayLabel(label) { var template = ""; if (label === "opinion") { template = [ "

", " ", label, " ", "

", ].join(""); } return template; } /** * Display "Follow", "Following" buttons * @param {Object} tData * @returns {String} */ function displayFollowingButton(tData) { var topicName = tData.topicName; var topicSlug = tData.topicSlug; var topicType = tData.topicType; var topicImg = tData.topicImg; var isAuthor = topicType === "author"; var authorImg = isAuthor && topicImg ? "" : ""; var template = isAuthor ? "/authors/" : "/topics/"; var href = window.tgam.env.baseRootAbsoluteUrl + template + topicSlug; var linkClasses = isAuthor ? "c-topic-link c-topic-link--author" : "c-topic-link"; return [ " ", ].join(""); } /** * Generates story card markup * @param {Object} article - to display * @param {Object} topicData - (topicName, topicSlug, topicType, topicVariation, topicImg) * @param {Boolean} addFollowButton * @returns {String} story card markup */ function storyCard(article, topicData, addFollowButton) { console.info("[ARC-6637] storyCard", { article: article, topic: topicData }); if (!article || !topicData) { return ""; } var tName = topicData.topicName; var tType = topicData.topicType; var tVariation = topicData.topicVariation; var followingTopic; var timeTemplate; var analyticsModifier = tType + ": "; if (addFollowButton) { // Display a follow button beside the topic name followingTopic = displayFollowingButton(topicData); timeTemplate = displayDateTag(article); } var label = getLabel(article); var image = getImage(article, label); var labelTemplate = displayLabel(label); var imageTemplate = displayImage(image); var headline = article.headlines.basic; var href = window.tgam.env.baseUrl + article.canonical_url; var sophiId = article._id; var dataAnalyticsClick = JSON.stringify({ type: "link", feature: "following feed", contentId: sophiId, label: analyticsModifier + tName.toLowerCase() + ": " + headline.toLowerCase(), page: "sec:homepage:personalized feed:" + tVariation, hierarchy: 1 }); var cardMarkup = ""; if (!followingTopic) { cardMarkup = [ "", "

", "

", " ", tName, " ", "

", "

", " ", headline, " ", "

", labelTemplate, "

", "

", imageTemplate, "

", "
" ].join(""); } else { cardMarkup = [ "

", followingTopic, "

", " ", "

", "

", " ", headline, " ", "

", "

", timeTemplate, "

", "

", "

", imageTemplate, "

", "
", ].join(""); } return [ "

", cardMarkup, "

", ].join(""); } /** * Adds the overlay trigger dot class * @param {String} type - "unread" or "no-follow" */ function addOverlayTriggerDot(type) { overlayTriggerDotClasses.forEach(function fn(dotClass) { if (dotClass === "c-your-globe__trigger--dot--" + type) { overlayTrigger.classList.add(dotClass); } else { overlayTrigger.classList.remove(dotClass); } }); overlayTrigger.classList.add("c-your-globe__trigger--dot"); } /** * Removes the overlay trigger dot class */ function removeOverlayTriggerDot() { overlayTriggerDotClasses.forEach(function fn(dotClass) { overlayTrigger.classList.remove(dotClass); }); overlayTrigger.classList.remove("c-your-globe__trigger--dot"); } /** * Returns a heading element to be displayed inside the overlay * @param {String} text * @returns {String} */ function overlayLabel(text) { return "

" + text + "

"; } var overlayHeadingHasFollowed = ( overlayLabel("The latest in topics and authors you follow") + "

View more in Following

" ); var overlayHeadingNoFollowed = ( overlayLabel("Get started: build your personal news feed") + "
    " + "
  1. Follow topics relevant to your reading interests.
  2. " + "
  3. Check back here or your Following page to view the latest articles on your topics.
  4. " + "
" ); var upToDateMessage = "

You’re up to date on your Following feed. Check again later for new stories.

"; // ************************************************ // Parse API response and inject markup into overlay // ************************************************ // Story card markup /** * Stories originally came from the following locations in the API response: * - data.articles[i].items[i].topics * - data.articles[i].items[i].authors * @param {Array} stories * @returns {String} story card markup */ function latestStoryCards(stories) { console.info("[ARC-6637] Display latest stories based on these stories:", stories); var storyCards = stories.map(function fn(story) { // The "topics" and "authors" arrays will only contain one item // (i.e. the topic or author that the user is following) var topic; var topicData; if (story.topics && story.topics.length) { // Normal topic topic = story.topics[0]; topicData = { topicName: topic.name, topicSlug: topic.slug, topicType: "topic", topicVariation: "following" }; } else if (story.authors && story.authors.length) { // Author topic topic = story.authors[0]; // Only authors have images associated with them - normal topics do not var authorImg = topic.metadata && topic.metadata.image ? topic.metadata.image : null; topicData = { topicName: topic.byline, topicSlug: topic.slug, topicType: "author", topicVariation: "following", topicImg: authorImg }; } // Don't display a follow button beside the topic because the user is already following it return storyCard(story, topicData, false); }).join(""); return storyCards; } /** * @param {Array} topics * @param {String} variation - "recommended" or "trending" (used for the click tracking analytics) * @returns {String} story card markup */ function recommendedTrendingStoryCards(topics, variation) { var uniqueStories = generateUniqueStory(topics); var storyCards = uniqueStories.map(function fn(topic) { // Grab one article var story = topic.items[0]; // Only authors have images associated with them - normal topics do not var authorImg = topic.authorTopic && topic.authorMetadata && topic.authorMetadata.image ? topic.authorMetadata.image : null; // Normally we'd display all of the topics that are assigned to an article, but // this API groups articles by topic, so we only have access to that one topic. // Even if we could display additional topics, we wouldn't want to becuase having // multiple follow buttons would junk up the UI. var topicData = { topicName: topic.name, topicSlug: topic.slug, topicType: topic.authorTopic ? "author" : "topic", topicVariation: variation, topicImg: authorImg }; // Display the follow button beside the topic because we're suggesting new topics to follow return storyCard(story, topicData, true); }).join(""); return storyCards; } /** * Topics originally came from the following locations in the API response: * - data.recommendedAuthors * - data.recommendedTopics * @param {Array} topics * @returns {String} story card markup */ function recommendedStoryCards(topics) { console.info("[ARC-6637] Display recommended stories based on these topics:", topics); return recommendedTrendingStoryCards(topics, "recommended"); } /** * Topics originally came from the following location in the API response: * - data.trendingTopics * @param {Array} topics * @returns {String} story card markup */ function trendingStoryCards(topics) { console.info("[ARC-6637] Display trending stories based on these topics:", topics); return recommendedTrendingStoryCards(topics, "trending"); } // Markup inside the overlay /** * @param {Array} stories * @returns {Object} markup for the overlay's header and body content areas */ function showLatestStories(stories) { console.info("[ARC-6637] Scenario: latest stories"); var storyCardsMarkup = latestStoryCards(stories); return { header: overlayHeadingHasFollowed, body: storyCardsMarkup }; } /** * @param {Array} topics * @returns {Object} markup for the overlay's header and body content areas */ function upToDateShowRecommended(topics) { console.info("[ARC-6637] Scenario: up to date, show recommended"); var storyCardsMarkup = recommendedStoryCards(topics); return { header: overlayHeadingHasFollowed, body: ( upToDateMessage + overlayLabel("Recommended for you") + storyCardsMarkup ) }; } /** * @param {Array} topics * @returns {Object} markup for the overlay's header and body content areas */ function upToDateShowTrending(topics) { console.info("[ARC-6637] Scenario: up to date, show trending"); var storyCardsMarkup = trendingStoryCards(topics); return { header: overlayHeadingHasFollowed, body: ( upToDateMessage + overlayLabel("Trending topics to follow") + storyCardsMarkup ) }; } /** * @param {Array} topics * @returns {Object} markup for the overlay's header and body content areas */ function notFollowingShowRecommended(topics) { console.info("[ARC-6637] Scenario: not following, show recommended"); var storyCardsMarkup = recommendedStoryCards(topics); return { header: overlayHeadingNoFollowed, body: ( overlayLabel("Recommended for you") + storyCardsMarkup ) }; } /** * @param {Array} topics * @returns {Object} markup for the overlay's header and body content areas */ function notFollowingShowTrending(topics) { console.info("[ARC-6637] Scenario: not following, show trending"); var storyCardsMarkup = trendingStoryCards(topics); return { header: overlayHeadingNoFollowed, body: ( overlayLabel("Trending topics to follow") + storyCardsMarkup ) }; } /** * Parse data from the personalized API and inject markup into the overlay * @see https://confluence.theglobeandmail.com/display/ARC/Logic+for+Embedded+on+Homepage++and+Your+Globe+Overlay * @param {Object} data - topic and story data provided by the API */ function parsePerzonalizedTopicsData(data) { console.info("[ARC-6637] parsePerzonalizedTopicsData", data); var overlayHeader = qs(".c-your-globe__overlay-header"); var overlayHeaderText = qs(".c-your-globe__overlay-header-text"); var overlayBody = qs(".c-your-globe__overlay-body"); if (!overlayHeader || !overlayHeaderText || !overlayBody) { return; } var totalTopicsFollowed = data.totalTopicsFollowed || 0; var totalAuthorsFollowed = data.totalAuthorsFollowed || 0; var recommendedTopics = data.recommendedTopics || []; var recommendedAuthors = data.recommendedAuthors || []; var latestStories = data.articles || []; var topics = []; var stories = []; var markup = ""; var headerBorder = true; if (totalTopicsFollowed || totalAuthorsFollowed) { if (latestStories.length) { // Scenario 1: "Latest stories" stories = generateLatestStories(latestStories); markup = showLatestStories(stories); // Similar to displayLatestAndRecommended() in ARC-6292 addOverlayTriggerDot("unread"); } else { if (recommendedTopics.length || recommendedAuthors.length) { // Scenario 2: "Up to date, show recommended" topics = recommendedAuthors.concat(recommendedTopics); markup = upToDateShowRecommended(topics); // Similar to displayRecommendedTrendingTopicList("rec") in ARC-6292 } else { // Scenario 3: "Up to date, show trending" topics = data.trendingTopics || []; markup = upToDateShowTrending(topics); // Similar to displayRecommendedTrendingTopicList("trend") in ARC-6292 } } } else { topics = recommendedAuthors.concat(recommendedTopics); if (topics.length) { // Scenario 4: "Not following, show recommended" markup = notFollowingShowRecommended(topics); // Similar to displayThreeTopicsOneStory("rec") in ARC-6292 } else { // Scenario 5: "Not following, show trending" topics = data.trendingTopics || []; markup = notFollowingShowTrending(topics); // Similar to displayThreeTopicsOneStory("trend") in ARC-6292 } addOverlayTriggerDot("no-follow"); headerBorder = false; } console.info("[ARC-6637] Append markup"); var spinner = qs(".c-spinner"); spinner && spinner.parentElement.removeChild(spinner); overlayHeaderText.insertAdjacentHTML("afterbegin", markup.header); overlayBody.insertAdjacentHTML("afterbegin", markup.body); if (!headerBorder) { overlayHeader.classList.add("c-your-globe__overlay-header--no-border"); } addFollowingFunctionality(); } // ************************************************ // API calls // ************************************************ /** * Get the personalized feed * @param {String} hashId - user's hash id * @param {String} env - environment * @see https://confluence.theglobeandmail.com/display/ARC/Logic+for+Embedded+on+Homepage++and+Your+Globe+Overlay * @returns {Promise
https://www.theglobeandmail.com/politics/article-federal-officials-revising-plan-to-regulate-social-media-in-light-of/?fbclid=IwAR1ja4s67XosXkRB9lGYsUbZmJ3an-TQkWHoAnSIUG5Vf557Dh7d7oWgt1U